SpringCloud 熔断器(第八章)及springboot图形化监控
SpringCloud-Hello案例开发-Ribbon+Hystrix组合
8.1 Hystrix服务熔断
目前情况:如果集群的三个电影服务都挂了,会怎样?
怎么通过resttemplate来完成
8.2 使用Ribbon+Hystrix组合:cloud-consumer-user
8.2.1 引入hystrix
<!-- 引入hystrix进行服务熔断 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>
8.2.2 开启断路保护功能@EnableCircuitBreaker
A调B,应该在服务的消费者上加断路保护
8.2.3 在方法上标注@HystrixCommand(fallbackMethod="xxx")来指定出错时调用xx方法
测试restTemplate断路保护:
8.3 使用Feign+Hystrix组合:cloud-consumer-user-feign
8.3.1 引入Hystrix
<!-- 引入hystrix进行服务熔断 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>
8.3.2 开启断路保护功能@EnableCircuitBreaker
跟上边一样
8.3.3 开启Feign对Hystrix支持
feign
8.3.4 Feign已经集成了Hystrix,使用起来非常简单@FeignClient(name="provider-user",fallback="异常处理类")
定义一个接口就行了 下边这一行看看就行,主要看图
/*使用Hystrix进行服务的熔断
* 1)、引入Hystrix的starter
* 2)、开启xxx功能 :@EnableCircuitBreaker
* 3)、@FeignClient(value="CLOUD-PROVIDER-MOVIE",fallback=指定这个接口的异常处理类(异常处理类必须实现这个接口))
*/
把刚才测试的注了
接着需要在service接口加一个属性
看结果,报错了
错误原因(不是远程调用失败了)
改一下就好了
运行结果:
比较一下两种方式
restTemplate
缺点:写的代码很笨很鸡肋
openFeign
只需要写一个实现类,实现这个接口,接口里面全是远程调用,直接在这个实现类里面返回兜底数据就行了,业务逻辑没有任何影响 -》(所以Feign是更优雅的远程调用形式,推荐使用)
第九章 SpringCloud-Hello案例开发-Hystrix Dashboard(仪表盘,就是那头豪猪)
(学不学无所谓,就是一个监控)
除了隔离依赖服务的调用以外,Hystrix还提供了近实时的监控,Hystrix会实时、累加地记录所有关于HystrixCommand的执行信息,包括每秒执行多少请求,多少成功,多少失败等。Netflix通过hystrix-metrics-event-stream项目实现了对以上指标的监控
9.1 引入actuator(cloud-consumer-user-feign)
(跟springcloud没关系,纯springboot依赖)
<!--监控豪猪-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
9.1.1 actuator是用来监控SpringBoot服务的,注意路径问题,具体的版本可能不一样,参考启动日志
9.1.2 可提供的监控服务为
有鉴权,所以访问false的就行,访问其他的你要给权限
重启user-feign
访问一下 /health 路径(他不需要权限)
9.2 修改配置文件,暴露数据监控流
management
一直ping,访问远程调用请求就不一样了
你是不是看不懂打印的什么?
9.3 引入HystrixDashboard
只是提供一个页面,我们单独给他提供一个工程
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix-dashboard</artifactId>
</dependency>
dashboard里面自带web
新建一个启动类
9.4 开启可视化监控功能
9.4.1 @EnableHystrixDashboard
启动项目
9.4.2 访问当前项目/hystrix,将Hystrix的stream地址输入
9.4.3 监控中,服务器正常
9.4.4 监控中,服务器重新启动,断路器打开
服务器都关闭后,会打开断路器,服务器重新启动的话,恢复正常
(断路器打开的时候,系统会返回自定义的兜底数据)这就是断路器