为spring gateway网关增加快速失败、重试功能

您所在的位置:网站首页 接口重试机制 为spring gateway网关增加快速失败、重试功能

为spring gateway网关增加快速失败、重试功能

2024-07-16 22:12| 来源: 网络整理| 查看: 265

重试功能

  gateway 本身是支持重试的(retry ), 只有简单请求会被重试(get)

  只会对连接超时进行重试,响应超时不会进行重试

  比如: 前一种可能是网络不通

            后一种是连接已经建立,接口已经调用到,但是业务方法执行太长,导致超时(504)

 

2. 快速失败

   gateway 默认采用 webflux ,响应式模型

   对于客户端的管理采用的是 spring cloud LoadBalancerClient 接口,该接口没有关于快速失败的定义

   所以gateway也就不支持ribbon的快速失败功能 (ribbon进入维护阶段,所以gateway的开发者不希望直接依赖ribbon)

 

需求

不支持快速失败的网关,一旦出现服务异常,只能等待注册中心的过期移除,对系统的稳定性会造成非常大的影响

为了系统的稳定,只能自己实现了,通过下面的组件实现

Hystrix + ribbon

Hystrix 帮我们转换与定义超时(504) 异常是否再重试

ribbon 已经提供了一套快速失败功能,在它的基础上应用

 

效果

       最大超时时间为12s,重试3次(4)

      每次最大超时时间 3s

      统计服务异常,连续异常超过3次,进入短路保护,30秒之内不再被调用

       重试也会统计异常信息     

      

配置      

       第一个 Hystrix , 全局超时控制 , (官方)

       Retry 开启重试, (官方)

       RibbonStatsRecorder ribbon异常统计 (自实现)

       第二个 Hystrix , 每次超时控制

      

                 

 

实现       新增 RibbonStatsRecorder

            首先我们在 Retry 之后增加一个相关统计的过滤器 RibbonStatsRecorder

       该过滤器会在调用结束后统计服务状态

       代码如下:

请注意标红的代码,需要把服务实例信息传过来,所以需要重写LoadBalancerClientFilter

      

  

重写 LoadBalancerClientFilter

       改变官方 LoadBalancerClientFilter 的逻辑,将 服务实例 暂存起来,让后续的统计过滤器能访问到

 

    增加 Hystrix 异常回调控制

       这里对 响应超时(504) 进行异常转换,让其也会进行重试。

       如果不想504也进行重试,删除此代码或不配置回调即可

 

 



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3