feign+hystrix 进行服务降级
时间:2019-07-11
本文章向大家介绍feign+hystrix 进行服务降级,主要包括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); }
这样,就不会熔断了,该报错报错,该超时超时!
原文地址:https://www.cnblogs.com/changeCode/p/11173309.html
- 云数据库安全,农场和餐馆:知道你的来源的重要性
- NO.32 不堪重负:线程池拒绝策略
- 工厂模式进阶之Android中工厂模式源码分析
- C加加游戏编程,大神十年的绝技,正确的入门,这才叫学习
- 我们应该担心吗?人工智能现在可以通过交谈来学习新单词!
- 印度财政部:比特币是纯粹投机行为 区块链资产是“庞氏骗局”
- 法律人工智能实验室成立,法官和律师会丢饭碗吗?
- 让GridView中CheckBox列支持FireFox
- 在ASP.NET MVC中通过URL路由实现对多语言的支持
- AI加持下的假肢将会越来越聪明
- 通过几个Hello World感受.NET Core全新的开发体验
- ASP.NET MVC三个重要的描述对象:ControllerDescriptor
- 基于自制数据集的MobileNet-SSD模型训练
- .NET Core采用的全新配置系统[1]: 读取配置数据
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法