博客
关于我
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/

    你可能感兴趣的文章
    Nginx配置负载均衡到后台网关集群
    查看>>
    ngrok | 内网穿透,支持 HTTPS、国内访问、静态域名
    查看>>
    NHibernate学习[1]
    查看>>
    NHibernate异常:No persister for的解决办法
    查看>>
    NIFI1.21.0_Mysql到Mysql增量CDC同步中_日期类型_以及null数据同步处理补充---大数据之Nifi工作笔记0057
    查看>>
    NIFI1.21.0_NIFI和hadoop蹦了_200G集群磁盘又满了_Jps看不到进程了_Unable to write in /tmp. Aborting----大数据之Nifi工作笔记0052
    查看>>
    NIFI1.21.0通过Postgresql11的CDC逻辑复制槽实现_指定表多表增量同步_增删改数据分发及删除数据实时同步_通过分页解决变更记录过大问题_02----大数据之Nifi工作笔记0054
    查看>>
    NIFI从MySql中增量同步数据_通过Mysql的binlog功能_实时同步mysql数据_根据binlog实现数据实时delete同步_实际操作04---大数据之Nifi工作笔记0043
    查看>>
    NIFI从MySql中增量同步数据_通过Mysql的binlog功能_实时同步mysql数据_配置binlog_使用处理器抓取binlog数据_实际操作01---大数据之Nifi工作笔记0040
    查看>>
    NIFI从MySql中增量同步数据_通过Mysql的binlog功能_实时同步mysql数据_配置数据路由_实现数据插入数据到目标数据库_实际操作03---大数据之Nifi工作笔记0042
    查看>>
    NIFI从MySql中离线读取数据再导入到MySql中_03_来吧用NIFI实现_数据分页获取功能---大数据之Nifi工作笔记0038
    查看>>
    NIFI从PostGresql中离线读取数据再导入到MySql中_带有数据分页获取功能_不带分页不能用_NIFI资料太少了---大数据之Nifi工作笔记0039
    查看>>
    NIFI同步MySql数据_到SqlServer_错误_驱动程序无法通过使用安全套接字层(SSL)加密与SQL Server_Navicat连接SqlServer---大数据之Nifi工作笔记0047
    查看>>
    Nifi同步过程中报错create_time字段找不到_实际目标表和源表中没有这个字段---大数据之Nifi工作笔记0066
    查看>>
    NIFI大数据进阶_FlowFile拓扑_对FlowFile内容和属性的修改删除添加_介绍和描述_以及实际操作---大数据之Nifi工作笔记0023
    查看>>
    NIFI大数据进阶_NIFI的模板和组的使用-介绍和实际操作_创建组_嵌套组_模板创建下载_导入---大数据之Nifi工作笔记0022
    查看>>
    NIFI大数据进阶_NIFI监控的强大功能介绍_处理器面板_进程组面板_summary监控_data_provenance事件源---大数据之Nifi工作笔记0025
    查看>>
    NIFI大数据进阶_内嵌ZK模式集群1_搭建过程说明---大数据之Nifi工作笔记0015
    查看>>
    NIFI大数据进阶_外部ZK模式集群1_实际操作搭建NIFI外部ZK模式集群---大数据之Nifi工作笔记0017
    查看>>
    NIFI大数据进阶_离线同步MySql数据到HDFS_01_实际操作---大数据之Nifi工作笔记0029
    查看>>