关于服务熔断的作用,因为微服务中可能会有很多个服务,各个服务之间可能存在互相调用的情况,如果一个服务挂掉,这样会造成很多错误请求,即服务雪崩的状态,这里添加熔断机制的目的主要为了保护服务,如果服务不可用直接进入fallback的处理方法中。

引入feign的依赖,其中包含了hystrix的组件

<dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>

启用feign hystrix

application.properties:

feign.hystrix.enabled=true

添加fallback服务熔断异常处理类

@Component
public class AuthFeignFallBack implements AuthFeignClient{
    private Logger logger = LoggerFactory.getLogger(this.getClass().getName());
    @Override
    public RtData checkToken(@RequestParam("token") String value) {
        logger.info("check token ["+value+"] auth服务熔断异常");
        return ResponseBuilder.build(RtCode.SERVER_ERROR);
    }
}

在feignclient中使用fallback

@FeignClient(name = "iflynote-auth",fallback = AuthFeignFallBack.class)
public interface AuthFeignClient {

    /**
     * 验证token
     * @param value
     * @return
     */
    @GetMapping(value = "/oauth/check_token")
    public RtData checkToken(@RequestParam("token") String value);
   
}

熔断测试效果

2020-03-27 15:33:03.506  INFO 19256 --- [ctor-http-nio-3] c.i.iflynote.gateway.filter.AuthFilter   : 认证信息{"code":500,"message":"server error"}

备注
fallbackFactory原理类似