feign+hystrix 进行服务降级
在学习cloud的时候,教程上面的例子是使用ribbon的,我觉得生产中一般肯定使用feign 的,所以百度了一下 feign使用hystrix的用法。
了解发现,feign本身就自带了hystrix功能了,不过我用的是1.5xspringboot版本+Dalston版本的cloud,所以需要配置打开feign的hystrix功能,直接上代码
在配置文件中增加一条配置
feign.hystrix.enabled=true
@RestController public class DcController { @Autowired EurekaClient eurekaClient; @GetMapping("/consumer") public String dc(){ User user = new User(); user.setName("mck1"); user.setAge(1); return eurekaClient.dc("mck"); } } @FeignClient(value = "eureka-client",fallback = FallBack.class) public interface EurekaClient { @GetMapping("/dc") public String dc(@RequestParam("user") String user); } @Component public class FallBack implements EurekaClient { @Override public String dc(String user) { return "服务熔断了,哈哈哈哈"; } }
经过测试,发现在关掉服务提供者的时候 ,确实进入了fallback。
另外,在进行学习的时候,一开始启动的时候发现项目报错,百度了那个错误,增加了一个配置
@Component public class FeignBeanFactoryPostProcessor implements BeanFactoryPostProcessor { @Override public void postProcessBeanFactory(ConfigurableListableBeanFactory configurableListableBeanFactory) throws BeansException { if (containsBeanDefinition(configurableListableBeanFactory, "feignContext", "eurekaAutoServiceRegistration")) { BeanDefinition bd = configurableListableBeanFactory.getBeanDefinition("feignContext"); bd.setDependsOn("eurekaAutoServiceRegistration"); } } private boolean containsBeanDefinition(ConfigurableListableBeanFactory beanFactory, String... beans) { return Arrays.stream(beans).allMatch(b -> beanFactory.containsBeanDefinition(b)); } }
就启动成功了
那么问题来了,开启了hystrix之后,那就是强制的了, 你不想熔断都没办法,必须配置fallback,那么有的人就说不配置不行吗?当然可以,改为配置confiuration就行了
上代码
@Configuration public class FeignDisableHystrixConfiguration { @Bean @Scope("prototype") public Feign.Builder feignBuilder(){ return Feign.builder(); } }
@FeignClient(value = "eureka-client",configuration = FeignDisableHystrixConfiguration.class) public interface EurekaClient { @GetMapping("/dc") public String dc(@RequestParam("user") String user); }
这样,就不会熔断了,该报错报错,该超时超时!
但是我遇到了一个问题,写了这个配置类之后,即使客户端接口不配置configuration = FeignDisableHystrixConfihguration 依然不走fallback了,就像全局禁用一样,目前还没发现原因
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步