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 秒以下,又可以正常访问。
 

猜你喜欢

转载自blog.csdn.net/SSbandianH/article/details/109443147