跳到内容

DeliverySpec.RetryAfterMax 字段

标志名称: delivery-retryafter

阶段:Alpha,默认禁用

跟踪问题: #5811

角色:开发者

当使用 delivery spec 配置事件传递参数时,您可以使用 retryAfterMax 字段来指定如何处理 HTTP Retry-After 标头,用于计算重试 429503 响应的退避时间。您可以为 Channels、Subscriptions、Brokers、Triggers 以及任何接受 delivery 字段的其他资源 spec 指定 delivery spec。

retryAfterMax 字段仅在您将 delivery spec 配置为执行重试时生效,并且仅适用于对 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 验证接受并且如果 max 覆盖 > 0,则强制执行 Retry-After 标头
稳定 / GA 不适用 强制执行 Retry-After 标头,无 max 覆盖 如果 max 覆盖 > 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 用法,但它不能保证所有实现(如 Channels 或 Sources)都真正实现了对该字段的支持。共享的 HTTPMessageSender.SendWithRetries() 逻辑已得到增强以支持此功能,所有使用它来执行重试的实现都将自动受益。基于此共享库的扩展实现(例如 RabbitMQ 或 Google Pub/Sub)将需要额外的开发工作来处理 retryAfterMax 字段。

我们使用分析和 cookie 来了解网站流量。有关您使用我们网站的信息会与 Google 共享以达到此目的。了解更多。