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