在 使用Feign来实现SpringCloud多模块之间的调用 这篇文章我写了如何去调用,但是并没有考虑异常宕机的情况。
比如:快手系统里面调用头条数据,但是头条系统宕机了要如何处理。
第一步:在公共父类中引入hystrix
<!-- Hystrix -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>
第二步:在启动类上添加@EnableCircuitBreaker注解
第三步:实现自己编写的feign接口类
实现这个接口,并将实现类标记为@Component,这里我专门创建一个包来放这个class
第四步:在自己编写的接口上引入这个实现类
第五步:配置配置文件,增加
feign:
hystrix:
enabled: true
把头条系统关闭后,在访问就会提示:
在写这发现在请求超过1s时,就会一直进入预警代码,就是一直打印“头条系统出现问题了”,看源码视频才发现Histrix也有默认时间为1s,所以需要在配置文件中去修改这个时间,所以这里要重新设置下。
hystrix:
command:
default:
execution:
isolation:
thread:
timeoutInMilliseconds: 2000
这样再次访问就不会进入预警了。
上面的这种方式,是预警了被调用的系统,那如果自己的系统出现了问题呢?采用@HystrixCommand来实现
第一步:创建一个参数和返回是一模一样的方法,里面的具体内容自己定义
第二步:在方法上引入
说明:只有getDataById这个方法出现异常了,才会走getDataByIdError这个方法,这里data.get("data").toString()当值为null时,会出现异常,也就是头条系统返回的值为null