https://blog.csdn.net/goldenfish1919/article/details/132752595
微服务系统中为了防止服务雪崩问题,服务之间相互调用的时候一般需要开启熔断与降级,下面就来看下feign如何集成hystrix来做熔断与降级。
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<!--高版本才需要单独引入-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
<version>2.2.10.RELEASE</version>
</dependency>
需要说明的是,低版本的feign默认已经依赖了hystrix,不需要添加额外的依赖,但是高版本的feign默认并没有依赖hystrix,因此需要额外导入hystrix的依赖。
所谓的降级就是在服务之间相互调用的时候,如果提供者抛出了异常,消费者并不会同步的也抛出异常,而是给客户端返回一个降级以后的结果,我们可以给FeignClient添加fallbackFactory来指定降级以后的处理逻辑。
feign:
hystrix:
enabled: true
比如我们有一个UserClient:
@FeignClient(value = "userservice",
url = "<http://localhost:8081>"
,fallbackFactory = UserFallbackFactory.class,
configuration = FeignConfig.class
)
public interface UserClient {
@GetMapping("/user/{id}")
public User queryById(@PathVariable("id") Long id);
}
public class UserFallbackFactory implements FallbackFactory<UserClient> {
@Override
public UserClient create(Throwable cause) {
return new UserClient(){
@Override
public User queryById(Long id) {
return new User(0L, "fallback user", "fallback address");
}
};
}
}
UserClient会引用这个配置,从而找到UserFallbackFactory这个bean。
public class FeignConfig {
@Bean
public UserFallbackFactory userFallbackFactory(){
return new UserFallbackFactory();
}
}