SpringCloud笔记03 Hystrix断路器
coconutnut

https://blog.csdn.net/ThinkWon/article/details/103732497

Hystrix功能:服务降级、服务熔断、线程隔离、请求缓存、请求合并、服务监控等

创建一个hystrix-service模块

经过前面一系列扎心操作,这次创建的时候没有用Spring Initializer加依赖,直接改的pom.xml并修改版本

@EnableCircuitBreaker开启断路器功能

pom中还要加一个依赖

1
2
3
4
5
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.1.0</version>
</dependency>

这个模块也添加了Ribbon的负载均衡功能

但是pom中并没有配置这个依赖

看了下依赖图发现是eureka-client依赖的

服务降级

在UserHystrixController中添加用于测试服务降级的接口

在UserService中添加调用方法与服务降级方法,并添加@HystrixCommand注解

启动eureka-server、user-service、hystrix-service服务

关闭user-service服务重新测试该接口

后面测试忽略某些异常降级、缓存、请求合并表现均和教程一样

DEBUG:调用服务失败

启动后注册中心

调用测试方法后

直接失败了?

试试原服务地址

没问题

这个bug似曾相识

上次在ribbon-service中添加了依赖

1
2
3
4
<dependency>
<groupId>com.netflix.ribbon</groupId>
<artifactId>ribbon-eureka</artifactId>
</dependency>

hystrix-service中也加一个试试

注册中心多了警告

运行*2

还是失败了

看下Maven

加个版本

ribbon模块用的是2.3.0

运行*3

还是挂了

拿源码的这三个模块试试

是可以的

对比版本

全部改成一样的

发现源码pom中还多了一个

1
2
3
4
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

以及

1
2
3
4
5
6
7
8
9
10
11
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>

难怪前面springframework-cloud的模块总是没有版本号,原来是没加这个

(解决了前面笔记02中一个MARK)

运行*4

还🥶是🥶挂🥶了

再来一个个比代码

没差啊?

难道是其它模块的依赖也要改?改吧

发现前面大部分都是有dependencyManagement的,所以其实也没什么变动

运行*5

刚才把spring-boot-starter-actuator删了,重新加上

运行*6

!成功了

可是这个时候其它版本都和源码一样了,但是源码没有用这个啊?-MARK-

问题总结

  1. 版本 版本 版本

  2. 注册中心有,但找不到服务,试试加上

    1
    2
    3
    4
    <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>

总结