博客
关于我
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 判断字符串是否包含子字符串
    查看>>
    python 判断当前时间是否为零点
    查看>>
    python 利用pandas读取本地中CSV文件的指定列 列名重命名 并保存回本地
    查看>>
    python 利用pyspark读取HDFS中CSV文件的指定列 列名重命名 并保存回HDFS
    查看>>
    python 利用pyttsx3文字转语音
    查看>>
    python 利用已有Ner模型进行数据清洗合并
    查看>>
    python 到大数据开发工程师_如何成为一个大数据开发工程师?
    查看>>
    python 加密解密(base64, AES)
    查看>>
    Python 包管理器和 Node.js
    查看>>
    Python 单词字母顺序不变且所有倒排
    查看>>
    python 反射机制
    查看>>
    python 启动提示IDLE's subprocess didn't make conne...
    查看>>
    python 命令接口_实现“[命令][操作][参数]”样式的命令行接口?
    查看>>
    Python 和 OpenCV.如何检测图像中的所有(填充)圆形/圆形对象?
    查看>>
    Python 和 RabbitMQ - 聆听来自多个渠道的消费事件的最佳方式?
    查看>>
    python编辑器打不开_关于命令ride.py打不开RF,而是打开pycharm编辑器问题解决思路...
    查看>>
    python编译exe同时支持32位_第三周:同时管理64位和32位版本的Python,并用Pyinstaller打包成exe...
    查看>>
    Python 和Java 哪个更适合做自动化测试?
    查看>>
    Python编程:掌握高级语言程序设计。从零基础到精通,收藏这篇就够了!
    查看>>
    python 图片转ico
    查看>>