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: trueKubernetes 格式:
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.ParseDuration。 | 0 | 否 |
timeout | 中间件允许重试请求的总时长。以秒或有效时长格式定义。 | 0 | 否 |
maxRequestBodyBytes | 定义请求体的最大大小。更多信息参见下文。 | 2MB | 否 |
status | 定义要重试的 HTTP 状态码范围。更多信息参见下文。 | [] | 否 |
disableRetryOnNetworkError | 在将请求传输到服务器时出错时禁用重试。更多信息参见下文。 | false | 否 |
retryNonIdempotentMethod | 为非幂等方法(POST、LOCK、PATCH)激活重试。 | false | 否 |
maxRequestBodyBytes
当请求体大小超过 maxRequestBodyBytes 阈值时,请求无法被重试,因为无法完整重放请求体。
disableRetryOnNetworkError 和 status
当 status 选项中定义了状态码时,即使 disableRetryOnNetworkError 设置为 true,Traefik 也会在网络错误时重试请求。
在生产环境使用 Traefik OSS?
如果你在工作中使用 Traefik,可以考虑为其添加企业级 API 网关能力或获取 Traefik OSS 的商业支持。