概述
还是之前的一个即时通信的项目。
首先要明白熔断器是什么。
简单的来说,当我们的某个服务在一个时间段一直报错,亦或者这些服务都处于了掉线状态,而消费他们的服务往往都会去等待这个掉线的服务到超时阈值,但这个过程中消费他们的服务也可能也是另外一个服务的提供者。那么再拓展一下思维,很有可能因为某些个别微服务的崩溃而导致级联崩溃。
这种形式的错误就叫服务雪崩效应。
所以,当某个服务出现问题达到一定次数,或一定时间的时候,我们需要使用某种形式关闭通往那个服务的路线,然后执行我们预先设定好的策略。
而这种操作,就是熔断器的用处。
使用
首先我们需要引入依赖项,但如果你使用了openfeign就无需引入了,因为它自带hystrix。在这个项目中我便使用了Hystrix。
配置
含义很明显,启用我们的熔断器。
feign:
hystrix:
enabled: true
熔断策略
我们只需要创建一个实现了我们之前创建的openfeign的映射接口的类,然后编写对应的策略就好,之后将其注册为组件。
@Component
public class FileServiceHystrix implements FileService {
@Override
public AjaxResult uploadUserFaceImage(MultipartFile file) {
return AjaxResult.error("存储服务器不可用");
}
@Override
public AjaxResult delete(String path) {
return AjaxResult.error("存储服务器不可用");
}
}
而在映射类中我们需要「@FeignClient」注解加上一个参数,即「fallback」然后写上我们对应的策略类就好了。
@FeignClient(name = "nonsense-file-service",fallback = FileServiceHystrix.class)
public interface FileService {
其后为了测试我们的熔断策略有没有生效,我便把我的文件存储服务给停掉了。此时返回的正是我们设置好的策略!
本页的评论功能已关闭