跳至内容

DeliverySpec.RetryAfterMax 字段

标志名称delivery-retryafter

阶段:Alpha,默认情况下禁用

跟踪问题#5811

角色:开发人员

使用 delivery 规范配置事件传递参数时,您可以使用 retryAfterMax 字段来指定在计算重试429503响应的退避时间时如何处理 HTTP Retry-After 标头。您可以为 Channel、Subscription、Broker、Trigger 以及接受 delivery 字段的任何其他资源规范指定 delivery 规范。

retryAfterMax 字段仅在将 delivery 规范配置为执行重试时才生效,并且仅与对429503响应代码的重试尝试相关。该字段提供了一个覆盖,以防止较大的Retry-After持续时间影响吞吐量,并且必须使用 ISO 8601 格式指定。正常退避持续时间和 Retry-After 标头值中较大的一个将用于后续重试尝试。指定 PT0S 的“零”值实际上会禁用Retry-After支持。

在此功能之前,Knative Eventing 实现不支持Retry-After标头,这是一种尝试为标准化该支持提供一条路径。首先,该功能是选择加入的,但最终状态将是选择退出,如下所示

功能阶段 功能标志 retryAfterMax 字段缺失 retryAfterMax 字段存在
Alpha / Beta 已禁用 被 Webhook 验证接受,并且不强制执行 Retry-After 标头 被 WebHook 验证拒绝
Alpha / Beta 已启用 被 Webhook 验证接受,并且不强制执行 Retry-After 标头 被 Webhook 验证接受,并且如果最大覆盖值 > 0,则强制执行 Retry-After 标头
稳定 / GA n/a 强制执行 Retry-After 标头,无需最大覆盖 如果最大覆盖值 > 0,则强制执行 Retry-After 标头

以下示例显示了一个 Subscription,它重试发送事件三次,并尊重Retry-After标头,同时将最大退避时间限制为 120 秒

apiVersion: messaging.knative.dev/v1
kind: Subscription
metadata:
  name: example-subscription
  namespace: example-namespace
spec:
  subscriber:
    ref:
      apiVersion: serving.knative.dev/v1
      kind: Service
      name: example-sink
  delivery:
    backoffDelay: PT2S
    backoffPolicy: linear
    retry: 3
    retryAfterMax: PT120S

注意

虽然功能标志通过 Webhook 验证强制执行对 retryAfterMax 字段的所有 DeliverySpec 使用,但它不能保证所有实现(如 Channel 或 Source)实际上都实现了对该字段的支持。共享的 HTTPMessageSender.SendWithRetries() 逻辑已得到增强以支持此功能,并且使用它执行重试的所有实现将自动受益。未基于此共享库的扩展实现(例如 RabbitMQ 或 Google Pub/Sub)将需要额外的开发工作才能尊重 retryAfterMax 字段。

我们使用分析和 Cookie 来了解网站流量。有关您使用我们网站的信息将与 Google 共享,以用于该目的。了解更多。