目录
1.添加Feign,用Feign的声明式客户端接口做远程调用
搭建Hystrix Dashboard(仪表盘:监控可视化)
一、概述
1.spring cloud 介绍
spring cloud 是一系列框架的集合。它利用 spring boot 的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用 spring boot 的开发风格做到一键启动和部署。spring cloud 并没有重复制造轮子,它只是将目前各家公司开发的比较成熟、经得起实际考验的服务框架组合起来,通过 spring boot 风格进行再封装屏蔽掉了复杂的配置和实现原理,最终给开发者留出了一套简单易懂、易部署和易维护的分布式系统开发工具包。
2.spring cloud 技术组成
-
注册和发现
-
Nacos
-
Eureka
-
-
远程调用 - OpenFeign
-
负载均衡
-
重试
-
-
系统容错和限流 - Sentinel, Hystrix
-
降级
-
熔断
-
-
错误监控 - Hystrix Dashboard、Turbine
-
配置中心 - Nacos、Config
-
链路跟踪 - Sleuth、Zipkin
hystrix
断路器,服务降级、熔断
zuul
API 网关,提供微服务的统一入口,并提供统一的权限验证
bus
消息总线, 配置刷新
3.Spring Cloud特点
(1)框架集
(2)提供了一整套微服务解决方案(全家桶)
(3)基于http调用,RestAPI
二、注册中心
1.概念
微服务系统的核心服务,所有模块启动都向注册中心注册,模块之间互相调用,要从注册中心互相发现
常用的注册中心:nacos、eureka、zookeeper、etcd、consul...
2.搭建eureka注册中心
- 新建spring模块:sp05-eureka
- 添加eureka server依赖
- pom.xml调整版本:springboot:2.3.2.RELEASE springcloud:Hoxton.SR6
- yml: 1.禁用自我保护模式 2.主机名 3.针对单台服务器,不向自己注册,不从自己拉取
- 启动类的注解: @EnableEurekaServer 通过注解来触发自动配置
spring:
application:
name: eureka-server
server:
port: 2001
eureka:
server:
#禁用自我保护模式
enable-self-preservation: false
instance:
#主机名
hostname: eureka1
client:
#针对单台服务器,不向自己注册,不从自己拉取
register-with-eureka: false
fetch-registry: false
3.eureka客户端
- 修改要连接注册中心的客户端,添加eureka client依赖
- yml文件配置eureka服务器连接地址
- 启动类添加@EnableDiscoveryClient
eureka:
client:
service-url:
defaultZone: http://eureka1:2001/eureka, http://eureka2:2002/eureka
4.eureka四条运行机制
- 注册 :客户端会一次一次反复连接服务器进行注册,直到注册成功为止
- 拉取 :客户端每30秒拉取一次注册表,来刷新注册表
- 心跳 :客户端每30秒发送一次心跳,如果服务器连续三次收不到一个服务的心跳,会删除这个服务
- 自我保护模式 :
- 由于网络不稳定,网络中断,15分钟内,85%服务器出现心跳异常,就会进入自我保护模式
- 中这种特殊情况下,所有服务都不删除
- 网络恢复正常后,可以自动退出保护模式
- 开发调用期间,可以禁用保护模式,避免影响测试
5.高可用
启动命令行参数: java -jar item,jar --server.port=8001
右键点商品的启动配置 -- edit configuration
在 program arguments 中填 --server.port=8001
右键点商品的启动配置 -- copy configuration
端口改成 8002
三、远程调用
1.添加Feign,用Feign的声明式客户端接口做远程调用
- pom.xml添加Feign依赖
- 启动类添加注解:@EnableFeignClients
- 定义两个客户端接口 1.ItemClient 2.UserClient
- 修改OrderServiceImpl 完成远程的调用
2.Feign集成了Ribbon,实现负载均衡和重试
默认已经启用负载均衡和重试
3.Ribbon重试
远程调用后台服务失败时,可以自动重试调用
-
失败: 出现异常、一台服务器宕机、阻塞延迟超时
-
重试参数:
-
MaxAutoRetries: 单台服务器重试次数,默认值是 0
-
MaxAutoRetriesNextServer: 更换服务器的次数, 默认值是 1
-
ReadTimeout: 等待响应的超时时间,默认值是 1000
-
OkToRetryOnAllOperations: 是否对所有请求方式都重试,默认只对GET重试
-
ConnectTimeout: 与后台服务器建立网络连接的超时时间
-
四、API网关
Zuul
- 统一的调用入口
- 统一的权限校验
- 集成Ribbon
- 集成Hystrix
1.统一的调用入口
- 新建spring模块:sp06-zuul
- 添加依赖:zuul、eureka client、sp01
- yml
- 启动类注解:@EnableZuulProxy
spring:
application:
name: zuul
server:
port: 3001
eureka:
client:
service-url:
defaultZone: http://eureka1:2001/eureka, http://eureka2:2002/eureka
zuul:
routes:
item-service: /item-service/**
user-service: /user-service/**
order-service: /order-service/**
retryable: true #重试
management:
endpoints:
web:
exposure:
include: "*"
2.统一权限校验
通过Zuul的过滤器,判断用户权限(有权限继续转发调用,没有权限从网关直接返回结果)
继承ZuulFilter——>添加@Component
3.zuul集成ribbon负载均衡和重试
- zuul默认启用负载均衡
- zuul默认不启用重试,zuul不推荐启用重试(一般不在网关执行重试,否则会造成后台大面积服务器压力倍增)
zuul启用ribbon重试:
- 1.添加spring-retry依赖
- 2.yml配置启用zuul重试:zuul.retryable=true
- 3.配置重试参数
4.zuul集成Hystrix容错、限流
zuul默认已经启用了Hystrix,可以直接写降级代码
- 1.实现FallbackProvider接口
- 2.添加@Component
- zuul会用自动配置类,对降级类进行自动配置
hystrix限流--熔断
当流量过大,后台服务出现故障,可以断开后台服务的链路,等待后台服务恢复
短路器的打开条件:1.10秒20次请求(必须首先满足) 2.50%失败,执行的降级代码
半开状态:
- 断路器打开一段时间后,会进入半开状态
- 会尝试发送一次客户端调用(成功,关闭断路器,恢复正常;失败,继续保持打开状态)
Hystrix监控
对Hystrix降级和熔断的情况进行监控,可以快速定位错误,查找系统中的问题
中06项目中,Hystrix利用actuator来暴露自己的监控日志数据
- 1.添加actuator依赖
- 2.yml配置暴露监控日志
m.e.w.e.i="*" 暴露所有监控日志
m.e.w.e.i=health,bean,mappings
m.e.w.e.i=hystrix.stream
搭建Hystrix Dashboard(仪表盘:监控可视化)
- 1.新建spring模块:sp07-hystrix-dashboard
- 2.添加依赖:Hystrix Dashboard
- 3.yml
- 4.启动类注解:@EnableHystrixDashboard
五、Turbine 聚合监控数据
- 1.新建spring模块:sp08-turbine
- 2.添加eureka client,turbine依赖
- 3.yml配置
- 4.启动类注解:@EnableTurbine
六、配置中心
1.准备 git 仓库
-
新建 springcloud1/config 文件夹
-
复制 2,3,4 的 application.yml 到config目录
-
item-service-dev.yml
-
user-service-dev.yml
-
order-service-dev.yml
-
-
创建本地仓库(已经有仓库不用重复创建),并提交
-
双击 shift 搜索 "create git repository"
-
选择 springcloud1 工程目录
-
ctrl+k或搜索"commit",填写提交信息、选择全部文件,提交
-
-
在 gitee 创建远程仓库(已经有仓库不用重复创建)
-
推送远程仓库
-
ctrl+shift+k或搜索 "push"
-
点 "define remote",粘贴远程库地址,完成推送
-
调整三个配置文件
配置中心的配置优先级最高,会覆盖模块的本地配置和本地启动参数,
防止配置中心配置,覆盖本地启动参数,添加 override-none: true
,
然后提交推送到远程仓库
2、搭建配置中心
- 1.新建spring模块:sp09-config-server
- 2.添加依赖:eureka client、config server
- 3.yml
- 4.启动类注解:@EnableConfigServer
git.uri = git仓库地址,例如https://gitee.com/nais_cgb/springcloud01
search-paths = config
3.连接配置中心获取配置
- 修改需要连接的module,添加config client依赖
- 所有module的application.yml全部注释,或者删除
- 添加bootstrap.yml
#1.连接eureka
eureka:
client:
service-url:
defaultZone: http://eureka1:2001/eureka, http://eureka2:2002/eureka
#2.设置配置中心的服务id
#3.设置下载的配置文件
spring:
cloud:
config:
discovery:
enabled: true
service-id: config-server
name: user-service
profile: dev