Feign的Hystrix支持
springcloud官方文档参考:17.4 Feign Hystrix Support.
如果Hystrix在类路径上并且feign.hystrix.enabled = true,Feign将用断路器包装所有方法。
如果只是想某个Feign Client禁用Hystrix,可以创建一个普通的Feign.Builder,并将scope设置为prototype。
例如:
@Configuration
public class FooConfiguration {
@Bean
@Scope("prototype")
public Feign.Builder feignBuilder() {
return Feign.builder();
}
}
Feign Hystrix的回退(fallbacks)
Hystrix支持回退的概念:当断路器打开或出现错误时将执行默认的代码路径。 要为给定的@FeignClient启用回退,请将fallback属性设置为实现回退的类名称。 您还需要将您的实现声明为Spring bean。
示例代码:
这里以movie模块修改,新的模块名为microservice-springcloud-movie-feign-with-hystrix。
1.为Feign启用hystrix
修改application.yml
feign:
hystrix:
enabled: true
2.编写FeignClient,并设置fallbacks
@FeignClient(name = "microservice-springcloud-user",fallback = UserHystrixClientFallback.class)
public interface UserFeignClient {
@RequestMapping(value = "/sample/{userId}", method = RequestMethod.GET)
User findUserById(@PathVariable("userId") Long userId);
}
3.创建回退类
@Component
public class UserHystrixClientFallback implements UserFeignClient
{
@Override
public User findUserById(Long userId)
{
User user = new User();
user.setId(0L);
return user;
}
}
4.测试
1.启动Eureka Server;
2.启动User服务;
3.启动microservice-springcloud-movie-feign-with-hystrix。
启动后,浏览器访问/user/1,得到正确响应。将user服务关闭,连续刷新20次以上,再次访问得到的结果是user的id为0,即我们的Fallback类中实现的方法。结果与springcloud系列15——hystrix简介及简单代码示例一节的一致。
代码结构:
这里要注意代码结构,否则在启动时会出现一些问题。
应用启动类如下:
@SpringBootApplication
@ComponentScan({"com.tommy.springcloud","com.tommy.config.fallback"})
@EnableFeignClients("com.tommy.config.feign")
public class MovieAppWithFeignAndHystrix
{
public static void main( String[] args )
{
SpringApplication.run(MovieAppWithFeignAndHystrix.class,args);
}
}
springboot扫描的类要与feign的分开。同时Fallback的类也要被springboot扫描到。