一、 Hystrix 对 Feign 的支持
1、 添加 IUserBiz 的实现类 RcFeignFallback
import org.springframework.stereotype.Component;
import com.drunck.education.bean.User;
import com.drunck.education.feign.IUserBiz;
@Component
public class RcFeignFallback implements IUserBiz {
@Override
public User find(int id) {
return null;
}
@Override
public String view1(int id) {
System.out.println("调用远程接口异常,返回自定义信息");
return "system error";
}
}
2、 只需要在@FeignClient 注解里面添加 fallback 属性,如下:
fallback=RcFeignFallback.class
二、 禁用 Hystrix
# 在 feign 里面禁用
hystrix feign.hystrix.enabled=false
三、 单个应用禁用 Hystrix
在 RcFeignConfiguration 里面配置一个 bean,如下:
@Bean @Scope("prototype")
public Feign.Builder feignBuilder() {
return Feign.builder();
}
四、 配置隔离策略
# 在 feign 和 Ribbon 里面配置隔离策略(全局配置) hystrix.command.default.execution.isolation.strategy=SEMAPHORE
# 配置单个 hystrix.command.HystrixCommandKey.execution.isolation.strategy
说明:HystrixCommandKey 在 Ribbon 下面默认为方法名,在 Feign 下面默认为类名#方法名(参数 类型)
@Bean
@Scope("prototype")
public Feign.Builder feignBuilder() {
class RcSetterFactory implements SetterFactory {
@Override
public Setter create(Target<?> target, Method method) {
String groupKey = target.name();
String commandKey = method.getName();
return HystrixCommand.Setter.withGroupKey(HystrixCommandGroupKey.Factory.asKey(groupKey)) .andCommandKey(HystrixCommandKey.Factory.asKey(commandKey));
}
}
return HystrixFeign.builder().setterFactory(new RcSetterFactory());
}