微服务项目中基于OpenFeign应用熔断器Hystrix

概述

还是之前的一个即时通信的项目。

首先要明白熔断器是什么。

简单的来说,当我们的某个服务在一个时间段一直报错,亦或者这些服务都处于了掉线状态,而消费他们的服务往往都会去等待这个掉线的服务到超时阈值,但这个过程中消费他们的服务也可能也是另外一个服务的提供者。那么再拓展一下思维,很有可能因为某些个别微服务的崩溃而导致级联崩溃。

这种形式的错误就叫服务雪崩效应。

所以,当某个服务出现问题达到一定次数,或一定时间的时候,我们需要使用某种形式关闭通往那个服务的路线,然后执行我们预先设定好的策略。

而这种操作,就是熔断器的用处。

1.png

使用

首先我们需要引入依赖项,但如果你使用了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 {

其后为了测试我们的熔断策略有没有生效,我便把我的文件存储服务给停掉了。此时返回的正是我们设置好的策略!

2.png