Spring Cloud configures Hystrix using Feign Record

fallback vs fallbackFactory

fallback 方式无法获取异常内容, 只能做降级。

fallbackFactory 可以获取异常内容。

fallbackFactory 使用方式

  1. Maven -> Hystrix
  2. 配置文件修改
  3. 启动类注解@EnableCircuitBreaker开启断路器
  4. Feign 接口 (接口名假设为Feign, 方便下文描述) 的注解 @FeignClient(…… fallbackFactory = FallBackClass.class)设置fallback =
  5. 创建FallBackClass-> implements FallbackFactory 接口, T值为Feign 接口类名
  6. 创建 InheritanceClass 接口, 继承 Feign接口 Feign。 内容为空即可。
  7. 在 FallBackClass中override FallbackFactory的方法, 只有一个 create 方法, 其返回值类型为 Feign, this is why we need to do step5。
1
2
3
4
5
6
7
8
9
10
11
12
@Override
public PaymentConsumerFeign create(Throwable throwable) {
// {}中的内容会被替换为 throwable.getMessage() 获取的内容
LOG.error("ExceptionTest = {}", throwable.getMessage());
// 之所以创建空接口 InheritanceClass, 因为此处直接return new ...即可
return new PaymentConsumerWithFallBackFactory() {
@Override
public String consumePayment(String userId, String saleId) {
return "Oops, server is busy";
}
};
}

LOG.error(“ExceptionTest = {}”, throwable.getMessage())输出的内容

1
2
ExceptionTest = status 500 reading PaymentConsumerFeign#consumePayment(String,String); content:
{"timestamp":"2022-01-07T06:41:58.885+0000","status":500,"error":"Internal Server Error","message":"Not Created Yet","path":"/processPayment"}

Provider中抛出的异常

1
2
3
if (state == 0){
throw new Exception("Not Created Yet");
}

fallback方式的使用

只需:

  1. @FeignClinet()中设置为fallback = FallBackClass
  2. 创建FallBackClass, implements Feign接口
  3. 对于每个方法, 写出降级内容即可