跳至内容

处理传递失败

您可以为 Knative Eventing 组件配置事件传递参数,这些参数在事件无法传递的情况下应用。

配置订阅事件传递

您可以通过在 Subscription 对象中添加 delivery 规范来配置每个订阅的事件传递方式,如下例所示

apiVersion: messaging.knative.dev/v1
kind: Subscription
metadata:
  name: example-subscription
  namespace: example-namespace
spec:
  delivery:
    deadLetterSink:
      ref:
        apiVersion: serving.knative.dev/v1
        kind: Service
        name: example-sink
    backoffDelay: <duration>
    backoffPolicy: <policy-type>
    retry: <integer>

其中

  • deadLetterSink 规范包含启用使用死信信道的配置设置。它告诉订阅无法传递到订阅者的事件会发生什么。配置此设置后,无法传递的事件将发送到死信信道目标。目标可以是 Knative 服务或 URI。在示例中,目标是一个名为 example-sinkService 对象或 Knative 服务。
  • backoffDelay 传递参数指定在传递失败后尝试重新传递事件之前的时间延迟。backoffDelay 参数的持续时间使用 ISO 8601 格式指定。例如,PT1S 指定 1 秒的延迟。
  • backoffPolicy 传递参数可用于指定重试退避策略。策略可以指定为 linearexponential。使用 linear 退避策略时,退避延迟是在重试之间指定的时间间隔。使用 exponential 退避策略时,退避延迟等于 backoffDelay*2^<numberOfRetries>
  • retry 指定在将事件发送到死信信道之前重试事件传递的次数。

配置 Broker 事件传递

您可以通过添加 delivery 规范来配置每个 Broker 的事件传递方式,如下例所示

apiVersion: eventing.knative.dev/v1
kind: Broker
metadata:
  name: with-dead-letter-sink
spec:
  delivery:
    deadLetterSink:
      ref:
        apiVersion: serving.knative.dev/v1
        kind: Service
        name: example-sink
    backoffDelay: <duration>
    backoffPolicy: <policy-type>
    retry: <integer>

其中

  • deadLetterSink 规范包含启用使用死信信道的配置设置。它告诉订阅无法传递到订阅者的事件会发生什么。配置此设置后,无法传递的事件将发送到死信信道目标。目标可以是任何符合 Knative Eventing 信道契约的可寻址对象,例如 Knative 服务、Kubernetes 服务或 URI。在示例中,目标是一个名为 example-sinkService 对象或 Knative 服务。
  • backoffDelay 传递参数指定在传递失败后尝试重新传递事件之前的时间延迟。backoffDelay 参数的持续时间使用 ISO 8601 格式指定。例如,PT1S 指定 1 秒的延迟。
  • backoffPolicy 传递参数可用于指定重试退避策略。策略可以指定为 linearexponential。使用 linear 退避策略时,退避延迟是在重试之间指定的时间间隔。这是一个线性增加的延迟,这意味着退避延迟在每次重试时都会增加给定的间隔。使用 exponential 退避策略时,退避延迟在每次重试时都会增加给定间隔的倍数。
  • retry 指定在将事件发送到死信信道之前重试事件传递的次数。初始传递尝试不包含在重试计数中,因此总传递尝试次数等于 retry 值 +1。

Broker 支持

下表总结了每个 Broker 实现类型支持的传递参数。

Broker 类 支持的传递参数
googlecloud deadLetterSinkretrybackoffPolicybackoffDelay
Kafka deadLetterSinkretrybackoffPolicybackoffDelay
MTChannelBasedBroker 取决于底层 Channel
RabbitMQBroker deadLetterSinkretrybackoffPolicybackoffDelay

注意

deadLetterSink 必须是 GCP Pub/Sub 主题 URI。googlecloud Broker 仅支持 exponential 退避策略。

配置 Channel 事件传递

失败的事件可能会在转发到 deadLetterSink 之前使用扩展属性进行增强,具体取决于使用的特定 Channel 实现。这些扩展属性如下所示

  • knativeerrordest

    • 类型:字符串
    • 描述:发送失败事件的原始目标 URL。这可以是基于遇到失败事件的操作的 deliveryreply URL。
    • 约束:始终存在,因为每个 HTTP 请求都有一个目标 URL。
    • 示例
      • "http://myservice.mynamespace.svc.cluster.local:3000/mypath"
      • ...任何 deadLetterSink URL...
  • knativeerrorcode

    • 类型:整数
    • 描述:来自最终事件调度尝试的 HTTP 响应状态码
    • 约束:始终存在,因为每个 HTTP 响应都包含状态码
    • 示例
      • "500"
      • ...任何 HTTP 状态码...
  • knativeerrordata

    • 类型:字符串
    • 描述:来自最终事件调度尝试的 HTTP 响应主体
    • 约束:如果 HTTP 响应主体为空,则为空,如果长度过长,则可能被截断。
    • 示例
      • 'Internal Server Error: Failed to process event.'
      • '{"key": "value"}'
      • ...任何 HTTP 响应主体...

Channel 支持

下表总结了每个 Channel 实现支持的传递参数。

Channel 类型 支持的传递参数
GCP PubSub
内存中 deadLetterSinkretrybackoffPolicybackoffDelay
Kafka deadLetterSinkretrybackoffPolicybackoffDelay
Natss

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