Skip to content

Traefik Retry 中间件文档

Retry(重试)

retry 中间件在服务器没有响应时重试给定的次数。

一旦服务器回复了请求(无论响应状态码如何),中间件就会停止重试。

Retry 中间件有一个可选配置用于启用指数退避(exponential backoff)。

配置示例

YAML 格式:

yaml
# 使用指数退避重试 4 次
http:
  middlewares:
    test-retry:
      retry:
        attempts: 4
        initialInterval: 100ms
        timeout: 60s
        maxRequestBodyBytes: 1024
        status:
          - "400"
          - "500-599"
        disableRetryOnNetworkError: true
        retryNonIdempotentMethod: true

Kubernetes 格式:

yaml
apiVersion: traefik.io/v1alpha1
kind: Middleware
metadata:
  name: test-retry
spec:
  retry:
    attempts: 4
    initialInterval: 100ms
    timeout: 60s
    maxRequestBodyBytes: 1024
    status:
      - "400"
      - "500-599"
    disableRetryOnNetworkError: true
    retryNonIdempotentMethod: true

配置选项

字段描述默认值必填
attempts应重试请求的次数。-
initialInterval指数退避系列中的第一次等待时间。最大间隔计算为 initialInterval 的两倍。如果未指定,请求将立即重试。以秒或有效时长格式定义,参见 time.ParseDuration0
timeout中间件允许重试请求的总时长。以秒或有效时长格式定义。0
maxRequestBodyBytes定义请求体的最大大小。更多信息参见下文。2MB
status定义要重试的 HTTP 状态码范围。更多信息参见下文。[]
disableRetryOnNetworkError在将请求传输到服务器时出错时禁用重试。更多信息参见下文。false
retryNonIdempotentMethod为非幂等方法(POST、LOCK、PATCH)激活重试。false

maxRequestBodyBytes

当请求体大小超过 maxRequestBodyBytes 阈值时,请求无法被重试,因为无法完整重放请求体。

disableRetryOnNetworkErrorstatus

status 选项中定义了状态码时,即使 disableRetryOnNetworkError 设置为 true,Traefik 也会在网络错误时重试请求。


在生产环境使用 Traefik OSS?

如果你在工作中使用 Traefik,可以考虑为其添加企业级 API 网关能力或获取 Traefik OSS 的商业支持。

基于 MIT 协议发布