
》》》》》spring cloud Feign接口组件中使用FallBackFactory整合hystrix《《《《《
ms-eureka-center (8761):作为Eureka中心服务,负责服务注册与发现。 ms-eureka-provider (9701):提供具体的服务接口。 ms-hystrix-consumer (8005):消费提供的服务,验证FallbackFactory的降级能力。
发布日期:2021-05-08 17:37:54
浏览次数:13
分类:精选文章
本文共 1934 字,大约阅读时间需要 6 分钟。
Fegin接口与Hystrix的集成优化方案——基于FallbackFactory的实现
在上一节中,我们实现了Fegin接口组件与Hystrix的整合。接下来,我们将采用FallbackFactory的方式实现相同功能,探索其优势并优化代码结构。
一、修改Fegin接口
为了实现Fegin接口的优化,我们需要对接口进行适当的修改。具体来说,我们引入了FallbackFactory的组件,使其能够更灵活地处理接口的降级和故障转移。这种方法与传统的Hystrix实现相比,具有更高的可定制性和扩展性。
二、FallbackFactory实现细节
为了实现FallbackFactory的功能,我们编写了一个新的服务类HystrixFallBackFactory。该类继承自FallbackFactory接口,并通过内部定义的回调方法实现接口的降级处理。
package com.ljf.weifuwu.springcloud.hystrix.service;import com.ljf.weifuwu.springcloud.hystrix.model.HystrixUser;import feign.hystrix.FallbackFactory;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.stereotype.Component;@Componentpublic class HystrixFallBackFactory implements FallbackFactory { private static final Logger LOGGER = LoggerFactory.getLogger(HystrixFallBackFactory.class); @Override public HystrixUserFegin create(final Throwable cause) { return new HystrixUserFegin() { @Override public HystrixUser getSingleUser(Long id) { LOGGER.info("fallback; reason was: ", cause); System.out.println("超时发生错误的.....使用fegin-hystrix-facotry进行处理"); HystrixUser u = new HystrixUser(); u.setId(00l); u.setName("fegin-hystrix-factory-超时错误"); return u; } }; }}
三、服务启动
为了验证FallbackFactory的有效性,我们需要启动对应的服务。以下是相关服务的启动说明:
四、功能测试
在服务正常启动后,我们对接口进行访问测试,确保FallbackFactory能够在接口超时或故障时有效切换到降级服务。
正常访问测试:
- 访问接口时,系统能够正常返回预期数据,确认FallbackFactory未被触发。
故障处理测试:
- 关闭ms-eureka-provider服务(9701),然后重新访问接口,确保系统能够自动切换到其他可用的服务。
五、实际效果
通过以上测试,我们可以清晰地看到FallbackFactory的优势。即使在提供者服务不可用的情况下,消费者仍然能够获得一个默认的回复,从而保证了系统的稳定性和可用性。这种降级机制能够有效地应对服务的不可用性问题,提升系统的整体容错能力。
通过本文的实现,我们成功地将Fegin接口与Hystrix进行了优化,采用FallbackFactory的方式实现了接口的降级和故障转移。这种实现方式不仅提升了系统的弹性,也为后续的服务优化和扩展奠定了良好的基础。
发表评论
最新留言
路过,博主的博客真漂亮。。
[***.116.15.85]2025年04月07日 15时35分53秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
vue 不常见操作
2019-03-06
jQuery的事件绑定与触发 - 学习笔记
2019-03-06
Python处理接口测试的签名
2019-03-06
测试流程规范--测试报告模板
2019-03-06
Linux上TCP的几个内核参数调优
2019-03-06
记一次讲故事机器人的开发-我有故事,让机器人来读
2019-03-06
高德算法工程一体化实践和思考
2019-03-06
重温网络编程——常识(三)
2019-03-06
判断一个数是否是2的幂
2019-03-06
js 闭包(新)
2019-03-06
vscode 编辑python 如何格式化
2019-03-06
seo 回忆录百度基本概念(一)
2019-03-06
重新整理数据结构与算法(c#)—— 算法套路二分法[二十四]
2019-03-06
用ThreadLocal来优化下代码吧
2019-03-06
netcore中使用session
2019-03-06
Android 开发学习进程0.25 自定义控件
2019-03-06
多媒体文件格式全解说(下)--图片
2019-03-06
淘宝WAP版小BUG分析
2019-03-06
NodeJS+Express+MongoDB
2019-03-06