SpringCloud 熔断器(第八章)及springboot图形化监控

SpringCloud 熔断器(第八章)及springboot图形化监控

SpringCloud-Hello案例开发-Ribbon+Hystrix组合

 

8.1 Hystrix服务熔断

目前情况:如果集群的三个电影服务都挂了,会怎样?

image-20220808225955363

怎么通过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

image-20220808230215601

A调B,应该在服务的消费者上加断路保护

 

8.2.3 在方法上标注@HystrixCommand(fallbackMethod="xxx")来指定出错时调用xx方法

image-20220808235427295

 

测试restTemplate断路保护:

image-20220808235852373

 

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:
  hystrix:
    enabled: true #默认false

image-20220809000645587

 

8.3.4 Feign已经集成了Hystrix,使用起来非常简单@FeignClient(name="provider-user",fallback="异常处理类")

定义一个接口就行了 下边这一行看看就行,主要看图

  /*使用Hystrix进行服务的熔断
  * 1)、引入Hystrix的starter
  * 2)、开启xxx功能 :@EnableCircuitBreaker
  * 3)、@FeignClient(value="CLOUD-PROVIDER-MOVIE",fallback=指定这个接口的异常处理类(异常处理类必须实现这个接口))
  */
 @FeignClient(value="CLOUD-PROVIDER-MOVIE",fallback=MovieFeignExceptionHandlerService.class)
 public interface MovieServiceFeign {
 // 未来这个接口就会调用很多方法,定制每一个方法远程出错如何返回兜底mock数据;
 @GetMapping("/movie")
 public Movie getNewMovie();
 }

 

把刚才测试的注了

image-20220809001015964

 

image-20220809001421901

 

接着需要在service接口加一个属性

image-20220809001639466

看结果,报错了

image-20220809002050625

 

错误原因(不是远程调用失败了)

image-20220809002243212

 

改一下就好了image-20220809002345402

 

运行结果:

image-20220809002702149

比较一下两种方式

restTemplate

image-20220809002917758

 

缺点:写的代码很笨很鸡肋

 

openFeign

只需要写一个实现类,实现这个接口,接口里面全是远程调用,直接在这个实现类里面返回兜底数据就行了,业务逻辑没有任何影响 -》(所以Feign是更优雅的远程调用形式,推荐使用)

image-20220809003329469

 

image-20220809004012807

 

第九章 SpringCloud-Hello案例开发-Hystrix Dashboard(仪表盘,就是那头豪猪)

(学不学无所谓,就是一个监控)

img

除了隔离依赖服务的调用以外,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服务的,注意路径问题,具体的版本可能不一样,参考启动日志

img

 

9.1.2 可提供的监控服务为

有鉴权,所以访问false的就行,访问其他的你要给权限

img

 

重启user-feign

访问一下 /health 路径(他不需要权限)

image-20220809011800482

 

9.2 修改配置文件,暴露数据监控流

 management:
  endpoints:
    web:
      exposure:
        include: hystrix.stream # 访问/actuator/hystrix.stream能看到不断更新的监控流

image-20220809011933744

image-20220809012127291

一直ping,访问远程调用请求就不一样了

image-20220809012752096

 

 

你是不是看不懂打印的什么?

 

9.3 引入HystrixDashboard

只是提供一个页面,我们单独给他提供一个工程

 <dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-starter-netflix-hystrix-dashboard</artifactId>
 </dependency>

image-20220809013219448

 

dashboard里面自带web

新建一个启动类

image-20220809013702090

 

9.4 开启可视化监控功能

9.4.1 @EnableHystrixDashboard

启动项目

image-20220809014150682

 

9.4.2 访问当前项目/hystrix,将Hystrix的stream地址输入

image-20220809014325896

 

9.4.3 监控中,服务器正常

image-20220809014648417

 

 

9.4.4 监控中,服务器重新启动,断路器打开

服务器都关闭后,会打开断路器,服务器重新启动的话,恢复正常

(断路器打开的时候,系统会返回自定义的兜底数据)这就是断路器

img

1

posted @ 2022-08-09 01:53  为了她  阅读(71)  评论(0编辑  收藏  举报