Feign的阻断器
在声明式远程服务调用Feign中,实现服务灾难性雪崩效应处理也是通过Hystrix实现的。而feign启动器spring-cloud-starter-feign中是包含Hystrix相关依赖的。如果只使用服务降级功能不需要做独立依赖。如果需要使用Hystrix其他服务容错能力,需要依赖spring-cloud-starter-hystrix资源。从Dalston版本后,feign默认关闭Hystrix支持。所以必须在全局配置文件中开启feign技术中的Hystrix支持。配置如下:
feign:
hystrix:
enabled: true
如果不使用Hystrix服务容错功能,在application client端,服务接口只需要继承服务标准api接口即可实现远程服务调用。如果使用了Hystrix,则有不同的编写方式。具体如下:
- 在消费者接口处添加fallback属性
@FeignClient(name = "EUREKA-CLIENT-PRODUCER", fallbackFactory = FeignFallbackService.class)
public interface FeignService extends IFeignService {
}
- 在消费者中,再创建一个上述FeignFallbackService的工厂类,并重写需要降级处理的方法
import feign.hystrix.FallbackFactory;
import org.springframework.stereotype.Component;
import java.util.HashMap;
import java.util.Map;
@Component
public class FeignFallbackService implements FallbackFactory<IFeignService> {
@Override
public IFeignService create(Throwable throwable) {
return new IFeignService() {
@Override
public String get(String name) {
return "服务器正忙,请稍后再试";
}
@Override
public User get(User user) {
user = new User();
user.setName("服务器正忙,请稍后再试");
return user;
}
@Override
public User post(User user) {
user = new User();
user.setName("服务器正忙,请稍后再试");
return user;
}
};
}
}
Feign的有关YML配置
YML配置文件,对SpringEL的支持更加优秀。可以通过SpringEL定制化的为每个服务调用配置Hystrix的容错处理方案。对Hystrix的配置粒度相比较Properties的配置方案更加细致。
在YML中可配置的Hystrix信息,和Properties中配置的内容是一致。
如果需要对每个服务做定制化配置,建议使用yml配置文件。在语法和格式上更容易管理和维护。
spring:
application:
name: XXXX
server:
port: 80
feign:
hystrix:
enabled: true
hystrix:
command:
# default代表全部服务配置,如果为某个具体服务定制配置,使用:'服务接口名#方法名(参数类型列表)'的方式来定义。如:'FirstClientFeignService#test(int)'。如果接口名称在应用中唯一,可以只写simpleName。如果接口名称在应用中不唯一,需要写fullName(包名.类名)
"FirstClientFeignService#testFeign()":
fallback:
enabled: false