Spring Cloud在中小型项目中的应用
思考方向包括市场、学习、前后端、测试、配置、部署、开发以及运维。
Eureka/Consul:服务发现 (根据情况选择一个)
Hystrix:断路器
Zuul:智能路由
Ribbon/Feign:客户端负载均衡 (Feign用的更多)
Turbine:集群监控
Springcloud-config:远程获取配置文件
接下来,我们开始搭建项目,首先我们到spring为我们提供的一个网站快速搭建springboot项目,点击访问,我这里用的是gradle,如果各位客官喜欢用maven,好吧你可以到http://mvnrepository.com/查看对应的依赖,点我访问。
一、搭建eureka-server服务springcloud-eureka-server
eureka-server作为服务发现的核心,第一个搭建,后面的服务都要注册到eureka-server上,意思是告诉eureka-server自己的服务地址是啥。当然还可以用zookeeper或者springconsul。
- 1.修改build.gradle文件
如果是maven项目请对应的修改pom.xml
- 1
- 2
- 1
- 2
- 3
- 4
还有几点需要修改的,大家对应图片看看,就是springboot打包的时候会提示找不到主累。
- 2.修改 application.yml,建议用yml。
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 3.修改程序的主类,建议修改类名,要加如eureka的 @EnableEurekaServer 注解,然后运行main方法。
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
http://localhost:8761/ 这个是eureka-server的页面地址,到这里,说明eureka-server搭建好了,简单吧,这一步一定要成功,否则后面的就不能继续进行下去了,后边基本类似。
二、搭建config-server服务springcloud-config-server
springcloud-config-server是用来将远程git仓库的配置文件动态拉下来,这样配置文件就可以动态的维护了。当然也可以选择本地仓库。
新建一个springboot项目,修改maven私服地址,并加入一下依赖。
- 1.修改build.gradle文件
- 1
- 2
- 3
- 4
- 5
- 2.修改application.yml文件
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 3.修改启动类
修改启动类,要加入这三个注解,因为要注册到eureka-server上,所以需要@EnableEurekaClient这个注解
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
然后运行启动springboot项目,等启动成功后访问eureka的页面,会发现springcloud-config-server已经注册到上面了,如果启动报错,请检查错误信息。
三、搭建服务提供者服务springcloud-provider-config
编写一个服务提供者,提供两个接口,即获取单个用户的信息和获取一个用户列表。用到了spring-data-jpa 和 spring-webmvc ,当然你们公司用什么你还是继续用什么。
注意 : 这里除了application.xml,还需要一个bootstrap.yml, 因为bootstrap.yml得加载顺序是在application.xml前边
- 修改build.gradle文件
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 2.编写配置文件bootstrap.yml
* 注意 : 这里除了application.xml,还需要一个bootstrap.yml
application.xml我是放到远程仓库地址的,大家可以直接到我的远程仓库,根据项目名(springcloud-provider-config)查询。配置文件的仓库地址:点击访问。
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 3.编写代码
编写主类
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
新建UserController, 考虑篇幅 UserService 和 UserRepository就不贴代码了,想看的可以下载我的代码。
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
运行springboot项目,去eureka-server查看,有没有注册上。
我们的springcloud-provider-config已经注册到eureka上了,访问接口,成功。
四、搭建消费者服务springcloud-consumer-ribbon-config-swagger
消费者要访问服务提供者的服务,这里用的是通过RestTemplate请求resetful接口,使用ribbon做客户端负载均衡,hystrix做错误处理,swagger生成接口文档。文章结尾处会更新feign的案例,feign和ribbon二选一,也可以都用。
还是熟悉的配方,熟悉的味道,新建springboot项目,添加项目依赖。
- 1.修改build.gradle文件
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 2.修改bootstrap.yml文件
application.yml 在git仓库,请前往git仓库查看。
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 3.编写代码
启动类代码
@RibbonClient 指定服务使用的负载均衡类型,name不指定服务则为所有的服务打开负载均衡,也可以在用yml中进行配置。
@EnableHystrix 是支持hystrix打开断路器,在规定时间内失败参数超过一定参数,就会打开断路器,不会发起请求,而是直接进入到错误处理方法。
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
新建UserController
ribbon一个坑,不能接受List类型,要使用数组接收。
@Api xxx 是swagger的注解
@HystrixCommand(fallbackMethod=”userFallbackMethod”)
如果请求失败,会进入userFallbackMethod这个方法,userFallbackMethod这个方法要求参数和返回值与回调他的方法保持一致。
ribbon这个方法就是通过service-id获取获取服务实际的地址,这样服务的地址就不用硬编码了。
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
运行springboot项目,先看有没有注册到eureka-server上。
注册成功后,访问接口,测试是否正确。
测试swagger-ui,访问localhost:8200/swagger-ui.html
到这里消费者服务就算是完成了,后边大家自己进行扩展。
五、用zuul做路由转发和负载均衡
这些微服务都是隐藏在后端的,用户是看不到,或者不是直接接触,可以用nginx或者zuul进行路由转发和负载均衡,zuul负载均衡默认用的是ribbon。
- 1.修改build.gradle文件
- 1
- 2
- 3
- 4
- 2.修改bootstrap.yml
还是原来的配方,application.yml在git仓库
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 3.启动类
@RefreshScope这个注解是当application.yml配置文件发生变化的时候,不需要手动的进行重启,调用localhost:8400/refresh,就会加载新的配置文件,当然正在访问的客户并不影响还是使用旧的配置文件,因为不是重启,后来的用户会使用新的配置文件。注意这块的刷新要用post请求。
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
启动springboot项目,访问eureka-server
这时候,我们就要通过zuul访问微服务了,而不是直接去访问微服务。
应该访问地址http://192.168.89.89:8400/springcloud-consumer-config/user/list,这块你要换成你的zuul地址。
但是有些人就会说,这样以后用户请求会不会太长,比较反感,所以可以通过配置进行修改访问地址。
- 1
- 2
- 3
- 4
在application.yml中加入这样一段配置,其实就是nginx中的反向代理,使用一下简短的可以代理这个微服务。这个时候我们就可以这样去访问了http://192.168.89.89:8400/consumer/user/list,是不是简短了很多
六、用hystrix-turbine-dashboard 做集群监控
项目在生产环境中,每个服务的访问量都不通,有些服务的访问量比较大,有时候有些服务挂了,不能继续服务,需要重启的时候,我们并不知道,所以这时候就需要使用hystrix-turbine-dashboard做一个监控,监控所有的微服务,可以看到这个接口实时访问量,和健康状况。
新建一个springboot项目,老套路,加入如下依赖
- 1 添加依赖
- 1
- 2
- 3
- 4
- 5
- 6
- 2 修改application.yml配置文件
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 3 修改主类
@EnableTurbine ,@EnableHystrixDashboard 一个都不能少
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
4 访问测试
这块的端口是8900,访问地址http://localhost:8900/hystrix.stream,看到的是下面的页面。
然后在那个网址的输入框里输网址http://localhost:8900/turbine.stream,点击monitor stream。刚打开的时候可能是空的,什么也没有,这并不表示你已经错了。这时候你访问消费者服务的接口,例如访问http://localhost:8200/user/list,多访问几次,然后看控制台有没有出现一个监控面板,没有就等会刷新一次,如果一直不出现,应该是配置有问题。
后边更新会追加到后边,后边随时更新
七、使用feign
在实际开发中,feign使用的还是挺多的,feign底层还是使用了ribbon。废话不多说,直接上步骤,在服务消费者中使用feign访问服务提供者。新建一个springboot项目,或者复制一个。
- 1加入依赖
swagger不使用的话,可以删掉。
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
2修改配置文件
这里修改的是bootstrap.yml,这里吧application.yml的配置也贴出来,这个是放在远程仓库的,通过config动态拉取下来。
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
application.yml
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 3 编码
1、主类注解
@EnableFeignClients
@EnableCircuitBreaker
@EnableHystrix
这三个都要,hystrix主要作用是断路器,会进如fein的fallback中。
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
2、编写feign接口,MFeignClient.class
name是指要请求的服务名称。这里请求的是服务提供者
fallback 是指请求失败,进入断路器的类,和使用ribbon是一样的。
configuration 是feign的一些配置,例如编码器等。
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
3 MFeignConfig.class feign的配置
这里配置了feign的打印日志等级
- 1
- 2
- 3
- 4
- 5
- 6
- 7
4 HystrixFeignFallback.class ,断路器回调方法
断路器要实现上边定义的MFeignClient接口,请求失败,进入断路器时,会回调这里的方法。
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 5 在controller中使用feign
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
八、使用sleuth+zipkin 实现链路追踪服务
在使用微服务的时候,我们发现,有时候排错不好排查,所以就给大家整个这个链路追踪,很方便知道是哪一个服务调用哪一个服务出现了问题。因为有些项目可能服务比较多。
1 添加依赖
新建一个springboot项目
虽然其他服务调用zipkin不是从eureka上动态过去服务地址,而是硬编码,但是这块还是考虑吧zipkin注册到eureka上。
- 1
- 2
- 3
- 2 修改application配置文件
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 3 主类注解添加
@EnableZipkinServer 主要是这个注解
启动服务后访问http://localhost:9411,就可以打开zipkin的控制台页面,这时候应该是什么都没有
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 4 其他服务中调用
这里我们在消费者服务和提供者服务里都加入如下依赖
- 1
- 2
- 3
- 4
然后修改配置文件,bootstrap.yml、
这块zipkin的地址是硬编码的,目前还没发现怎么从服务注册中心eureka上动态获取,以后有解决方案,会更新帖子
sleuth这个是配置提取率,可以配置也可以不配置
- 1
- 2
- 3
- 4
- 5
- 6
启动服务,然后访问消费者服务的接口,这时候访问zipkin的控制台http://localhost:9411
点击依赖分析,可以看到调用服务链,因为这块只涉及到两个服务,所以只有两个,在实际生产环境中,这块可能有很多,到时候看起来就特别直观了。
Spring Cloud在中小型项目中的应用相关推荐
- spring cloud多模块项目框架搭建-Redis-Cluster集群搭建及系统集成
第九章 Redis-Cluster集群搭建及系统集成 本系列博客旨在搭建一套能用于实际开发使用的spring cloud多模块微服务项目框架,并不是一个spring cloud的demo而已,提供系统 ...
- Spring Cloud在云计算SaaS中的实战经验分享
摘要 云帐房CTO张英磊基于自己的个人经验,分享Spring Cloud在云计算SaaS中的实战经验,希望能为大家带来一些思路上的帮助. 内容来源:2017年5月6日,云帐房CTO张英磊在" ...
- spring cloud多模块项目框架搭建-集成SLF4J和log4j2日志组件
第七章 集成SLF4J和log4j2进行日志管理 本系列博客旨在搭建一套能用于实际开发使用的spring cloud多模块项目框架,并不是一个spring cloud的demo而已,提供分布式系统的 ...
- spring cloud多模块项目框架搭建-集成lombok
第五章: spring cloud多模块项目框架搭建-集成lombok 本系列博客旨在搭建一套能用于实际开发使用的spring cloud多模块微服务项目框架,并不是一个spring cloud的de ...
- Spring Cloud 微服务项目实战 -
文章目录 微服务"三大功能,两大特性" Spring Boot & Spring Cloud Spring Cloud 组件库一览 Spring Cloud 版本 毕业版本 ...
- Spring Cloud 微服务项目操作实战流程(完结)
Spring Cloud入门项目操作实战流程 Day01~02 〇.Service - 业务服务结构 商品服务 item service,端口 8001 用户服务 user service,端口 81 ...
- Spring Boot+Spring Cloud实现itoken项目
itoken项目简介 开发环境 操作系统: Windows 10 Enterprise 开发工具: Intellij IDEA 数据库: MySql 5.7.22 Java SDK: Oracle J ...
- 从零开始带你实战搭建Spring Cloud Alibaba商城项目
这里写目录标题 一:环境搭建 二:项目搭建 三:分布式组件--Spring Cloud Alibaba 1.微服务架构简介 2.为什么使用SpringCloud Alibaba作为组件 3.本次项目技 ...
- Spring Security 在互联网项目中的实战分享
SpringBoot 和 Spring Cloud 中默认都是使用 Spring Security框架,这门技术非学不可.那么我们在企业中该如何灵活的运用它呢? 本场 Chat 将通过以下几个方面进行 ...
最新文章
- python transformer category_Python 生成VOC格式的标签实例
- 第八节 字符串的插入
- linux常用shell命令面试,shell经典笔试题目总结
- SAP修改数据表(tables)的方法
- java dataconvert_Java DateConverter类代码示例
- POJ3006-Dirichlet's Theorem on Arithmetic Progressions
- matlab启动不了jvm,MATLAB ::在-nojvm启动选项下不再支持此功能
- javascript 西瓜一期 13 十六进制的数数方式与进位
- caffe data层_Caffe Softmax层的实现原理?
- Slam中几种变换的理解
- git提交时”warning: LF will be replaced by CRLF“提示
- 机器学习傻瓜的深入研究
- 【转】windows下mongodb安装与使用整理
- linux 命令:yum 详解
- H3C网络设备模拟器配置VLAN-Hybrid
- Java实现对png图片文件电子签名操作
- 百度网盘在电脑端取消自动续费
- 《科比传》留下深刻印象的文字
- delphi使用Foxit Quick PDF Library读写pdf文本和图片
- Away3D学习笔记1 - 戏说Flash 三维引擎
热门文章
- python语言及其应用的答案_Python语言及其应用练习解答
- 完美解决office安装程序失败提示:错误 1402无法打开键UNKNOWN\Components\xxx
- 使用Sellmeier方程(Sellmeier Dispersionfitting)拟合波长-折射率数据——Python实现
- 小学计算机京剧脸谱教案,小学信息技术课教学设计模板
- 利用promise.race来实现请求超时埋点功能
- 一个很好用的计划管理软件——飞项
- Mega-wechat微信模板消息发送服务
- 计算中英文字符串的长度!
- CS224w 03-Motifs and Structural Roles in Networks
- 【Paper】期刊投稿文章类型