1. 序言

前面已经将openfeign引入了,现在引入hytrix做负载服务熔断降级

1.1. hystrix 引入

1.1.1. pom依赖

1
2
3
4
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>

注意不要引入到

1
2
3
4
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-netflix-hystrix</artifactId>
</dependency>

没有starter自动配置会报错的

1.1.2. 启动类添加注解@EnableCircuitBreaker

1
2
3
4
5
6
7
8
9
10
@SpringBootApplication
@EnableFeignClients
@EnableCircuitBreaker
public class CloudAlibabaConsumerFeignApp {
public static void main(String[] args) {
ConfigurableApplicationContext run = SpringApplication.run(
CloudAlibabaConsumerFeignApp.class, args
);
}
}

1.1.3. Feign调用的地方

  1. @FeignClient注解

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    @FeignClient(
    name = "cloud-provider",
    contextId = "hello2",
    path = "/hello/helloClass"
    //,fallback = HelloFeignHystrixFallback.class
    ,fallbackFactory = HelloFeignHystrixFallbackFactory.class
    //,decode404 = false
    //url="127.0.0.1:8002"
    )
    public interface HelloFeignHystrix {
    @GetMapping("/helloMethod2")
    public Object hello();
    }
  2. 实现类

    • fallback 实现

      1
      2
      3
      4
      5
      6
      7
      @Component
      public class HelloFeignHystrixFallback implements HelloFeignHystrix {
      @Override
      public Object hello() {
      return "服务调用异常,通过HelloFeign2Fallback降级熔断处理";
      }
      }
    • fallbackFactory实现

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      @Component
      public class HelloFeignHystrixFallbackFactory implements FallbackFactory<HelloFeignHystrix> {
      @Override
      public HelloFeignHystrix create(Throwable throwable) {

      //可以做异常处理
      throwable.printStackTrace();

      return new HelloFeignHystrix() {
      @Override
      public Object hello() {
      return "服务调用异常,通过HelloFeignFallbackFactory降级熔断处理";
      }
      };
      }
      }

配置feign的时候选择fallback或fallbackFactory其中一个就好

  • fallback: 指定一个回调类,回调类实现@FeignClient注解的接口,并且加入容器中。
    当出现需要回调的时候会调用此类。
  • fallbackFactory: 指定一个回调类,回调类实现FallbackFactory接口,加入容器中。泛型为@FeignClient注解的类,覆写create()方法
    当出现需要回调的时候会调用此类。

fallbackfallbackFactory的区别就在于FallbackFactory会返回异常信息Throwable,可以用此处理其他的业务逻辑,如存储日志,打印异常等。
一般建议使用FallbackFactory接口