实践bug总结-Feign使用Hystrix配置

简介: 实践bug总结-Feign使用Hystrix配置
  • 在之前的文章中使用注解 @HystrixCommandfallbackMethod属性实现回调的。
@Slf4j
@Component
public class AdditionCommand {
    @Autowired
    private AdditionClient additionClient;
    @HystrixCommand(fallbackMethod = "fallback")
    public ResponseEntity<ResultData> add(Integer a, Integer b) {
        // 模拟接口异常
        Random random = new Random();
        int r = random.nextInt(10);
        if (r % 2 == 0) {
            throw new RuntimeException();
        }
        return additionClient.add(a, b);
    }
    public ResponseEntity<ResultData> fallback(Integer a, Integer b) {
        ResultData resultData = new ResultData();
        Message message = Message.builder().code(10000).message("xxxx").build();
        resultData.setMessage(message);
        return ResponseEntity.ok(resultData);
    }
}

  • 然后,Feign是以接口的形式进行工作的,本身没有方法体。那么Feign怎么与Hystrix整合呢?


  • 事实上,SpringCloud默认已经为Feign整合了Hystrix,只要添加Hystrix依赖,Feign默认就会用断路器包裹所有方法
    Feign接口定义:

26. import com.gemantic.commons.ResultData;
27. import org.springframework.cloud.netflix.feign.FeignClient;
28. import org.springframework.http.ResponseEntity;
29. import org.springframework.web.bind.annotation.GetMapping;
30. import org.springframework.web.bind.annotation.RequestParam;
31. 
32. /**
33.  * @author Yezhiwei
34.  * @date 17/12/14
35.  */
36. @FeignClient(name = "springcloud-subtraction-service", fallback = SubtractionClientFallBack.class)
37. public interface SubtractionClient {
38. 
39.     /**
40.      * 减法接口
41.      * @param a
42.      * @param b
43.      * @return
44.      */
45.     @GetMapping(value = "/sub")
46.     ResponseEntity<ResultData> sub(@RequestParam("a") Integer a, @RequestParam("b") Integer b);
47. }
回调实现 SubtractionClient接口:
1. import com.gemantic.commons.ResultData;
2. import org.springframework.http.ResponseEntity;
3. import org.springframework.stereotype.Component;
4. import org.springframework.web.bind.annotation.RequestParam;
5. 
6. /**
7.  * @author Yezhiwei
8.  * @date 17/12/14
9.  */
10. @Component
11. public class SubtractionClientFallBack implements SubtractionClient {
12.     @Override
13.     public ResponseEntity<ResultData> sub(@RequestParam("a") Integer a, @RequestParam("b") Integer b) {
14.         // 这里是实现的回调逻辑!
15.         return null;
16.     }
17. }

  • 好了,开始测试。but but but 问题来了,访问了几次接口,断路器Hystrix一直不起作用, HystrixDashboard也没有收到任何统计信息。感觉Feign中并没有启用Hystrix,通过查看文档发现了Hystrix在Feign中的开关配置, 从Disable HystrixCommands For FeignClients By Default  (https://github.com/spring-cloud/spring-cloud-netflix/issues/1277) 中知道了产生错误的原因,以及为什么要默认关闭Hystrix。


  • 解决方案,在properties文件中增加 feign.hystrix.enabled=true

相关文章
SpringCloud极简入门-Feign开启Hystrix
1.支付服务集成Hystrix 官方文档:https://cloud.spring.io/spring-cloud-static/Greenwich.SR5/single/spring-cloud.html#spring-cloud-feign-hystrix 支付服务 springcloud-pay-server-1040 之前集成了Feign,修改该工程集成Hystrix。我们除了要给Feign开启Hystrix以外还需要为Feign接口编写托底类。
191 0
Ribbon、Feign、Hystrix超时&重试&熔断问题
在使用Ribbon、Feign、Hystrix组合时,因为配置的问题出现以下现象,让我的大脑CPU烧的不行不行(拿我老家话说就是“脑子ran滴奥”)
189 0
|
7月前
Springcloud-ribbon和hystrix配置
Springcloud-ribbon和hystrix配置
49 0
|
Java Spring
15SpringCloud - 断路器项目示例(Feign Hystrix)
15SpringCloud - 断路器项目示例(Feign Hystrix)
52 0
|
负载均衡 Java Linux
springCloud搭建、zuul、feign、hystrix、ribbon(内部培训)
springCloud搭建、zuul、feign、hystrix、ribbon(内部培训)
176 0
springCloud搭建、zuul、feign、hystrix、ribbon(内部培训)
|
缓存 负载均衡 监控
Spring Cloud 五大组件 简介 Eureka、Ribbon、Hystrix、Feign和Zuul
Spring Cloud 五大组件 简介 Eureka、Ribbon、Hystrix、Feign和Zuul
1332 0
|
缓存 负载均衡 监控
springboot不香吗?为什么还要使用springcloud--各个组件基本介绍(Feign,Hystrix,ZUUL)
springboot不香吗?为什么还要使用springcloud--各个组件基本介绍(Feign,Hystrix,ZUUL)
104 0
|
监控 Java Spring
Spring Cloud【Finchley】-11Feign项目整合Hystrix监控
Spring Cloud【Finchley】-11Feign项目整合Hystrix监控
135 0
|
6月前
springCloud之服务降级熔断Hystrix、OpenFeign
springCloud之服务降级熔断Hystrix、OpenFeign
370 0
|
7月前
|
监控 Java API
Spring cloud Hystrix 、Dashboard、API(zuul)相关报错
Spring cloud Hystrix 、Dashboard、API(zuul)相关报错
84 2