SpringCloud 练手实例(修图版)

码云地址:https://gitee.com/527184687/cloudproject

重修版地址:https://gitee.com/527184687/cloud-test

1.开发环境window,工具idea 2018

2.准备 plugins 安装spring boot 插件 2018版在线插件老是链接超时,没法只能本地安装插件了。

https://plugins.jetbrains.com/ 查询插件下载下来,然后本地安装。

安装成功后New Module 中会出现

spring Cloud 组件有很多,并且还在持续更新和增加中

在这里我们只做基础练手的SpringCloud

0.简介

1.服务注册和服务发现。

    zookeeper、consul、Eureka等,Netflix 公司在 github 上公告 Eureka 2.0 开源工作停止,继续使用风险自负。但是Eureka还是比较稳定和简单的,这里我们用Eureka做服务发现注册

2.客户端负载均衡组件

  ribbon

3.Feign 声明式REST客户端

  微服务之间的调用本质还是http请求,只要是http请求的都可以使用feign,帮助我解决代码的重复编写,fegin整合了ribbon,默认会使用ribbon的负载策略。

  feign最重要的作用是整合业务中多个http请求为一个resfult 接口。如:用户服务,文章服务。一般两个服务我们会先查询用户接口,然后通过用户的信息查询用户的文章,这得查询两个接口,并且还有逻辑顺序在里面。而feign就是解决接口调用逻辑,防止因调用逻辑错误导致崩溃问题。

4.网关组件

  zuul提供动态路由,监控,弹性,安全等边缘服务的框架。可以做filter、session等。

还有hystrix断路器、spring cloud config远程配置服务等,spring Cloud 还有其他组件后续再研究

好了,准备完了咱们开始。

1.新建一个maven project

    新建一个空白的maven project


一直到finish


这个maven 是一个工程包,打包用。

2.服务的注册与发现

    创建子module


中间是服务发现的组件我们用的eureka,选中那个spring initializr会自动帮我们在pom添加上maven路径

这是spring initializr生成的module

这里需要在cloudtest(父类project)pom.xml手动添加,否则从新导入maven项目时,ide无法显示模块关系

<!-- 引入SpringCloud微服务常用组件-->

<modules>

        <module>eureka</module>

</modules>

Sping Cloud基于SpringBoot,而SpringBoot这个框架使用的是application.properties或者是application.yml,properties优先级高于yml。两者区别是一个是.分隔,一个是:分隔看个人习惯。这里我两个都写了。

eureka详细配置说明这里 Spring Cloud Eureka 常用配置及说明

最后在spring boot启动类上加上注解

@EnableEurekaServer //eureka服务注册中心

到这里eureka的服务发现与注册完成了,咱们来试一下

访问localhost:8801

咱们的eureka成功了。

3.创建服务

    这里有个概念:服务提供者和服务消费者

    服务提供者:服务的被调用方,即为其他服务提供服务的服务。

    服务消费者:服务的调用方,即依赖其他服务的服务。

这个概念网上都是这么说的,但是两者代码没有什么区别。网上查询资料和思考,这里它们还真的只是概念。它没有调用其他服务,只提供服务它就是提供者;它调了其他服务,它就是消费者,它要是两者都是也行。这里真的很烦人,好多文章语文能力不够的还不一定能读懂呢o(* ̄▽ ̄*)o

前几步跟上面一样

这里不一样,不一样,不一样!选择了Eureka 服务注册,要是不选它会怎样呢?结果是不选它,你上面的Eureka是不能发现你这个user-service服务的。还有Ribbon负载均衡器,这个不选它会怎么样呢?实例中没什么影响,但是如果你要启用多个user-service那你就需要它了。

finish 完成

再次感觉spring initializr真方便。( •̀ ω •́ )✧

先写配置文件

server.port=8802

spring.application.name=user-service

服务端口8802 服务名称是user-service。要是负载的话spring.application.name=user-service可以是一个,端口可以开多个。

spring boot启动类添加注释@EnableDiscoveryClient或者@EnableEurekaClient 两个都是注册。

注册中心是eureka使用@EnableEurekaClient这个只为Eureka服务,其他的注册中心使用

@EnableDiscoveryClient,包括Eureka。所以这里咱们使用@EnableDiscoveryClient

先创建service,输出"user-service:张三";要结合mybatis的话,跟springboot和springMVC类似。

然后创建Controller

咱们用的是@RestController,这里有@Controller和@RestController的区别呢,区别就是@RestController注解相当于@ResponseBody + @Controller合在一起的作用。

spring boot @RequestMapping @GetMapping @PostMapping 这几个区别是,@GetMapping和@PostMapping 是@RequestMapping +method = RequestMethod.GET的缩写

这里有个坑点 要返回JSON数据的话需要头部加上

produces = MediaType.APPLICATION_JSON_UTF8_VALUE

相当于response设置Content-Type=application/json;charset=UTF-8

如果不设置,返回默认是xml格式。这里可以通过实现WebMvcConfigurer中configureContentNegotiation来统一配置。

//使用两个注解

@Configuration

@EnableWebMvc

这样就省去每个接口都要produces了,并且parameterName("mediaType")根据mediaType参数返回xml或者json两种格式。还可以通过后缀来实现如 getuser.json或者getuser.xml

每个服务很少会只启动一个,一般都会做负载。

下面咱们给这个user-service 做个负载

在spring boot启动类上添加bean。@LoadBalanced 注解就是启用负载,其他策略配置请看

Ribbon负载均衡策略配置 - Lovnx - CSDN博客

user-service启动多个8802、8803、8804

这里只需要增加三个配置文件就和一个主配置文件

配置文件命名规则必须是:

application-{profile}.properties/application-{profile}.properties

咱们把之前的配置文件改一下。

先复制3个application.properties改名

springboot中spring.profiles.active来具体激活一个或者多个配置文件的。

所以application.properties中只需要写

spring.profiles.active=8802

启动其他几个服务只需要修改spring.profiles.active等于的值就行了。

这里yml格式配置清晰明了好书写。建议使用yml

打包后使用 java -jar xxx.jar --spring.profiles.active=8804 来启用不同的配置文件

yml 格式支持两种模式一种和.properties一样多个文件-分隔,另一种是写在一个文件中

https://blog.csdn.net/swordsnapliu/article/details/78540902

命令行启动:


启动多个可以自己实验一下。

idea要启动三个相同服务需要configureactions中复制三个,否则直接右键run会弹出stop and return 只能启动一个。

Override parameters 启动的附加参数:这样可以通过ide 启动多个。

好咱们启动。咱们看一下效果

分别访问一下

8802,8803,8804


完美!ヾ(≧▽≦*)o

4.声明式REST客户端

负载什么时候用呢?这里zuul时用、feign RPC时用、只要远程服务调用就会启动负载。咱们都试试。

RPC与REST区别:RPC是框架,REST是框架风格。

feign的RPC

    重复上面的动作

这里选择的时feign

先来配置文件咱们用9000端口

spring boot 启动类添加注解

@EnableDiscoveryClient或者@EnableEurekaClient

@EnableFeignClients //RPC扫描

创建RPC:

添加注解

@FeignClient("user-service") //告诉RPC访问那个服务

@RequestMapping(value = "/getuser?name=RPC-9000") //调用服务那个接口

为了大家能感知到我给接口传参name=RPC-9000

创建Controller,要使用restTemplate 需要在启动类里添加RestTemplate的实现

并且改造一下user-service的Controller,增加了参数name,谁调用的。

启动测试,第一次端口8004,getuserRPC

F5刷新一下,变成了8803,再刷新输出结果端口变化。


说明,负载是起作用的。完美!( ̄▽ ̄)"

另一种调用方式通过RestTemplate 进行服务间调用

先在启动类中增加RestTemplate,你也可以直接new 对象。上面有提到。

然后增加一个接口 /getuserREST。我不太喜欢这种风格。代码中固化的变量和暴露的东西有点多,不喜欢这种风格。

可以看一下【架构师】微服务架构--REST与RPC - 老莫的博客 - CSDN博客

看一下区别

5.zuul网关

  先来说一下网关的必要性请看【微服务】Zuul的必要性 - 海棠不惜胭脂色,独立蒙蒙细雨中 - CSDN博客

个人认为网关最重要的作用是

安全验证

过滤保护

流量管理和控制

说白话就是你家小区看大门的大爷,谁能进、谁不能进(安全验证);送外卖的能进,送快递的不能进(过滤保护);开一次闸杆只能进一辆车,小车来了闸杆开5s,大车来了开15s(流量管理和控制);

要是没有这个这个网关呢,在流量小的时候不会有事,只要流量上来了。分分钟把你小区堵死瘫痪掉。

创建方式与之前一样,不一样的是这里勾选zuul,到这大家发现这个new Module只是控制了pom,要是忘了勾选了,自己修改在pom中添加组件所需的jar包一样的。没什么神奇的,程序员就是要懒。

先修改配置文件这里注意一下,zuul 两种写法我喜欢第一种直观。

zuul.routes.user-service=/api-a/**

这是把user-service服务编程/api-a/getuser

zuul.routes.user-service=/api-a/**

#等同于一下写法

#zuul.routes.provider.path=/api-a/**

#zuul.routes.provider.serviceId=user-service

#yml写法

zuul:

  routes:

    user-service: /api-a/**

spring boot 启动类注解

@EnableZuulProxy

@EnableDiscoveryClient

基础的zuul已经算完事了,其他的过滤啊,session啊,熔断啊,流量控制啊。在这就不写了,不然太多了。

启动测试一下,第一次是8802

刷新一下,编程了8803


到这咱们的SpringCloud 练手实例基本完事!o(* ̄▽ ̄*)o

红色文字描述,是Eureka心跳检测警告。

这里我尝试使用原JSP项目升级,网上找了一些cloud jsp 不能使用。自己尝试后找到一些坑点

第一步:




配置文件和目录结构:

自己创建缺失文件夹

--webapp

  --WEB-INF

   --index.html




pom.xml 增加jstl 解析模板

properties 只定义了编码相关,网上有的把视图配置也放进去,我尝试了。不起作用。后来我找到使用一下注解也可以控制配置

@Configuration

@EnableWebMvc

配置:


创建html和controller:


我这里也想做个负载试试行不行

跟UserServer一样操作过程

但是,要是使用idea 的Run/Debug Configurations 需要几个地方注意一下。


测试:



尝试一下负载:

修改feign


重启测试一下:


o( ̄▽ ̄)d居然可行啊,这样一个简单的前端负载就可以了。不用搞nginx 那一套。微型负载可以满足小用户量需要求了。

赞!!!!!!!!!!!!!!!!


通过分析研究Spring Cloud神秘面纱已经揭开了一点。管中窥豹,可见一斑。这个Spring Cloud自由度很高,耦合很低的框架。基本上每一个功能使用插件都可以进行替换 如:我不用zuul用gatway等等;每一个功能都可以互相替换并且还可以做分布式,如:feign与zuul互换,feign也可以在做负载,等等。

网上关于Spring Cloud 相关理论很多自己去看看。理解了思想才重要。

下一次我写一下spring Cloud 连接数据库使用阿里的druid连接池和filter 过滤器和session共享

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 222,627评论 6 517
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 95,180评论 3 399
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 169,346评论 0 362
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 60,097评论 1 300
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 69,100评论 6 398
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,696评论 1 312
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 41,165评论 3 422
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 40,108评论 0 277
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,646评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,709评论 3 342
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,861评论 1 353
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 36,527评论 5 351
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 42,196评论 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,698评论 0 25
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,804评论 1 274
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 49,287评论 3 379
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,860评论 2 361

推荐阅读更多精彩内容

  • 微服务架构模式的核心在于如何识别服务的边界,设计出合理的微服务。但如果要将微服务架构运用到生产项目上,并且能够发挥...
    java菜阅读 2,958评论 0 6
  • 微服务架构模式的核心在于如何识别服务的边界,设计出合理的微服务。但如果要将微服务架构运用到生产项目上,并且能够发挥...
    程序员技术圈阅读 2,783评论 10 27
  • 1 为什么需要服务发现 简单来说,服务化的核心就是将传统的一站式应用根据业务拆分成一个一个的服务,而微服务在这个基...
    谦小易阅读 25,109评论 4 93
  • spring cloud 在微服务架构中,业务都会被拆分成一个独立的服务,服务与服务的通讯是基于http rest...
    田大娃的辣条阅读 594评论 0 1
  • 今天休息回家,约了牙医看了医生,一大早就有好多人排队等待了,幼儿到老人都有,各种的牙齿问题,看来牙齿问题是社会的普...
    Tracy_zhang阅读 290评论 0 2