SpringCloud-熔断器Hystrix(二)
动手实践
1
)引入依赖
在
consumer
-
demo
消费端系统的
pom.xml
文件添加如下依赖:
2
)开启熔断
在启动类
ConsumerApplication
上添加注解:
@EnableCircuitBreaker
可以看到,我们类上的注解越来越多,在微服务中,经常会引入上面的三个注解,于是
Spring
就提供了一个组合注
解:
@SpringCloudApplication
因此,我们可以使用这个组合注解来代替之前的
3
个注解。
3
)编写降级逻辑
当目标服务的调用出现故障,我们希望快速失败,给用户一个友好提示。因此需要提前编写好失败时的降级处理逻
辑,要使用
HystrixCommand
来完成。
改造
consumer
-
demo\src\main\java\com\itheima\consumer\controller\ConsumerController.java
处理器
类,如下:
要注意;因为熔断的降级逻辑方法必须跟正常逻辑方法保证:
相同的参数列表和返回值声明
。失败逻辑中返回User
对象没有太大意义,一般会返回友好提示。所以把
queryById
的方法改造为返回
String
,反正也是Json
数据。这样失败逻辑中返回一个错误说明,会比较方便。
说明:
@HystrixCommand(fallbackMethod = "queryByIdFallBack")
:用来声明一个降级逻辑的方法
测试:
当
user
-
service
正常提供服务时,访问与以前一致。但是当将
user
-
service
停机时,会发现页面返回了降级处理
信息:
4
)默认的
Fallback
刚才把
fallback
写在了某个业务方法上,如果这样的方法很多,那岂不是要写很多。所以可以把
Fallback
配置加在类
上,实现默认
fallback
;
再次改造
consumer-demo\src\main\java\com\itheima\consumer\controller\ConsumerController.java

@DefaultProperties(defaultFallback = "defaultFallBack")
:在类上指明统一的失败降级方法;该类中所有方法
返回类型要与处理失败的方法的返回类型一致。

5
)超时设置
在之前的案例中,请求在超过
1
秒后都会返回错误信息,这是因为
Hystrix
的默认超时时长为
1
,我们可以通过配置修
改这个值;修改
consumer
-demo\src\main\resources\application.yml 添加如下配置:
这个配置会作用于全局所有方法。为了方便复制到
yml
配置文件中,可以复制 hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds=2000 到
yml
文件中会自 动格式化后再进行修改。
为了触发超时,可以在
user
-
service\src\main\java\com\itheima\user\service\UserService.java
的方法中休眠2
秒;
可以发现,请求的时长已经到了
2s+
,证明配置生效了。如果把修改时间修改到
2
秒以下,又可以正常访问。