博客
关于我
SpringCloud了解(五)(Feign 断路器)
阅读量:152 次
发布时间:2019-02-28

本文共 1594 字,大约阅读时间需要 5 分钟。

Feign断路器:防止服务雪崩效应的关键

在微服务架构中,每个服务都可能成为整个系统的“薄弱环节”。当一个服务出现故障时,会引发连锁反应,导致整个系统陷入停顿。这就是所谓的“雪崩效应”。为了应对这一问题,Feign断路器提供了一种有效的解决方案。

为什么需要Feign断路器?

在微服务环境中,服务之间通过RPC进行通信。为了保证服务的高可用性,通常会采用集群部署。但即便如此,网络故障或服务自身问题仍然可能导致某个服务的不可用。假设有大量请求同时发送到一个不可用的服务,会导致Servlet容器的线程资源被耗尽,最终引发服务瘫痪。这种依赖式的服务关系,使得单个服务的故障可能对整个微服务系统造成严重影响。

为了防止这种“雪崩”效应,断路器模型被提出了。它通过监控目标服务的健康状态,当不可用达到一定阈值时,自动开启断路器,切断对不可用的服务的调用。

Feign断路器的工作原理

在微服务架构中,一个请求往往需要调用多个服务。如果底层服务出现故障,会导致连锁故障。为了防止这种连锁反应,Feign断路器设置了一个阈值(默认为5秒20次)。当目标服务在这段时间内多次失败时,断路器会被打开,阻止进一步的请求。这样,可以有效避免因单个服务故障导致的连锁故障。

当断路器打开时,可以选择执行一个回调方法,直接返回一个固定值,或者执行一个备用逻辑。这可以避免因为等待不可用的服务而导致的线程阻塞,确保服务能够继续正常运行。

配置Feign断路器

要实现Feign的断路器功能,首先需要在配置文件中开启断路器。以下是修改application.yml的示例:

feign:  hystrix:    enabled: true

默认情况下,Feign的断路器是关闭的。通过设置enabled: true可以开启断路器功能。

定义回调逻辑

在实际应用中,可能需要定义一个回调逻辑来处理断路器的情况。可以在接口中使用@FeignClient注解,并指定一个fallback回调类。

例如,在HelloService接口中添加注解:

@FeignClient(value = "guoergouProducer", fallback = HelloServiceFallback.class)public interface HelloService {    @RequestMapping("/hello")    public String serviceHello(@RequestParam("name") String name);}

然后实现回调逻辑的类:

@Componentpublic class HelloServiceFallback implements HelloService {    @Override    public String serviceHello(String name) {        return "抱歉,服务不可用,请稍后再试 " + name;    }}

当目标服务不可用时,Feign会自动调用回调方法,避免因等待超时或服务不可用而导致的线程阻塞。

服务启动与测试

  • 启动注册中心:确保服务之间可以通过注册中心发现和调用。常用的注册中心有Eureka、Zookeeper等。

  • 启动服务提供者:将服务注册到注册中心,并确保服务能够被其他服务发现和调用。

  • 启动Feign客户端:配置并启动Feign客户端,确保客户端能够使用断路器功能。

  • 测试服务调用:通过Feign客户端发送请求,验证当目标服务不可用时,是否能够正确执行回调逻辑。

  • 验证断路器效果:关闭目标服务提供者,观察Feign客户端是否能够正确回调,确保断路器逻辑有效。

  • 通过以上步骤,可以有效地配置和使用Feign断路器,防止服务故障引发的连锁反应,确保微服务系统的高可用性和稳定性。

    转载地址:http://evpc.baihongyu.com/

    你可能感兴趣的文章
    python基于flask搭建http服务(一)—— 实现数据查询和Excel导出
    查看>>
    Python块键盘/鼠标输入
    查看>>
    python在心理学研究中的应用有哪些_心理学在线研究可用平台简介和应用进展
    查看>>
    python在使用HTMLTestRunner时,报告为空,错误提示<_io.TextIOWrapper name='<stderr>' mode='w' encoding='utf_8'>...
    查看>>
    python在gpu上运行_【python】python开启GPU加速
    查看>>
    Python在def函数中使用for循环
    查看>>
    Python在def函数中使用for循环
    查看>>
    Python在Conda环境中,但在Windows虚拟环境中没有激活
    查看>>
    python系列【仅供参考】:python pip 错误 ModuleNotFoundError: No module named pip._internal 解决办法
    查看>>
    python图像条状状噪声,使用PYTHON PIL从验证码图像中删除背景嘈杂的线条
    查看>>
    Python图像处理:从内存加载jpeg
    查看>>
    python固定后缀(名物化词汇)词频统计:抽取+统计+可视化
    查看>>
    python商品评论数据采集与分析可视化系统 Flask框架 requests爬虫 NLP情感分析 毕业设计 源码
    查看>>
    python商品数据分析可视化系统(带爬虫)京东销售数据分析 计算机毕业设计 源码下载
    查看>>
    python商品库存管理系统 django框架 商品网站 MySQL数据库 源码下载 计算机毕业设计
    查看>>
    Python哪个版本最稳定好用2023.10.19
    查看>>
    Python和黑客技术的渊源
    查看>>
    Python和RF编写接口自动化
    查看>>
    Python和RF编写web自动化
    查看>>
    python和js哪个难_【Python】记一次学习,Python 与 js 在实现闭包时的差异
    查看>>