ribbon超时重试配置

说明

服务调用者 连接 服务提供者 超时后,或者,服务调用者 成功连接 服务提供者 但 读取超时后,会触发 重新发请求

注意: 本文内容,是 单独使用Ribbon,而 不使用Feign

应用场景

  • 配合重试使用

  • 服务提供者响应慢,需要增大连接超时、读超时的时长

全局配置

开启重试机制

默认是关闭的。注意,官方文档中的配置参数少了enabled:

spring:
  cloud:
    loadbalancer:
      retry:
        enabled: true

亲测,不配置此项也可以

重试配置

ribbon:
  restclient:
    enabled: false

  OkToRetryOnAllOperations: false
  MaxAutoRetries: 0
  MaxAutoRetriesNextServer: 1
  ReadTimeout: 5000
  ConnectTimeout: 2000

解释:

  • enabled:true表示启用配置。单独使用Ribbon,不用Feign,必须加该配置,默认值:false

  • ConnectTimeout:指的是建立连接所用的时间,默认值:5000毫秒

  • ReadTimeout:建立连接后,从服务器读取资源(远程服务器返回内容,如:html、json)所用的时间。默认值:2000毫秒

  • OkToRetryOnAllOperations:默认false,一般设置为false 或 不配置此项

    • false:只有 get请求,读超时(ReadTimeout)后,进行重试
    • true:所有请求,读超时(ReadTimeout)后,都会进行重试
  • MaxAutoRetries:对当前实例的重试次数,不包括首次调用,默认为0

  • MaxAutoRetriesNextServer:重试负载均衡其他的实例最大重试次数,不包括首次调用,默认1

OkToRetryOnAllOperations 推荐 设置false

详细参见:https://www.cnblogs.com/zhangjianbin/p/7228628.html

如果 OkToRetryOnAllOperations 设置为 true,那么 读超时(ReadTimeout)后,所有请求都会进行重试,即:当发送 post、put请求,read 超时后,重试 会引发问题

在restful中,post 一般是 保存 操作,问题如下:

  1. 服务提供者 确实接收到 服务调用者 的 post 请求,即:确实执行 保存 操作

  2. 但是,服务提供者 返回响应时,由于 网络抖动,导致 服务调用者 没有接收到 该响应

  3. 那么 服务调用者 将会 触发 重试机制,服务调用者 再次向 服务提供者 发post 请求,服务提供者 接收请求后,会再次执行 保存 操作,那么就 保存 2 条记录

除非 服务提供者 实现了 接口幂等性

OkToRetryOnAllOperations 为true,亲测不可用

将 OkToRetryOnAllOperations 设置为 true,仍然只有 get 请求会重试,其他请求仍不会重试

亲测不可用,不知道为什么

使用 openfeign 是好使的(openfeign底层使用ribbon)

例子

ribbon:
  restclient:
    enabled: true
  OkToRetryOnAllOperations: false #对所有操作请求都进行重试,默认false
  ReadTimeout: 5000   #负载均衡超时时间,默认值5000
  ConnectTimeout: 3000 #ribbon请求连接的超时时间,默认值2000
  MaxAutoRetries: 1     #对当前实例的重试次数,默认0
  MaxAutoRetriesNextServer: 1 #对切换实例的重试次数,默认1

对于 get请求,read超时后,将重复发送4次

局部设置

针对调用某个 服务提供者,进行配置

NOTICE-SERVICE: # eureka中的服务id
    ribbon:
        OkToRetryOnAllOperations: false
        ReadTimeout: 5000
        ConnectTimeout: 2000
        MaxAutoRetries: 0
        MaxAutoRetriesNextServer: 1

服务id,eureka中的服务id,如下图:

感谢:
https://blog.csdn.net/Deronn/article/details/103127711


原文出处:/show_1IX1QQtOV462.html