处理传递失败¶
您可以为 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-sink
的Service
对象或 Knative 服务。backoffDelay
传递参数指定在传递失败后尝试重新传递事件之前的时间延迟。backoffDelay
参数的持续时间使用 ISO 8601 格式指定。例如,PT1S
指定 1 秒的延迟。backoffPolicy
传递参数可用于指定重试退避策略。策略可以指定为linear
或exponential
。使用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-sink
的Service
对象或 Knative 服务。backoffDelay
传递参数指定在传递失败后尝试重新传递事件之前的时间延迟。backoffDelay
参数的持续时间使用 ISO 8601 格式指定。例如,PT1S
指定 1 秒的延迟。backoffPolicy
传递参数可用于指定重试退避策略。策略可以指定为linear
或exponential
。使用linear
退避策略时,退避延迟是在重试之间指定的时间间隔。这是一个线性增加的延迟,这意味着退避延迟在每次重试时都会增加给定的间隔。使用exponential
退避策略时,退避延迟在每次重试时都会增加给定间隔的倍数。retry
指定在将事件发送到死信信道之前重试事件传递的次数。初始传递尝试不包含在重试计数中,因此总传递尝试次数等于retry
值 +1。
Broker 支持¶
下表总结了每个 Broker 实现类型支持的传递参数。
Broker 类 | 支持的传递参数 |
---|---|
googlecloud | deadLetterSink 、retry 、backoffPolicy 、backoffDelay |
Kafka | deadLetterSink 、retry 、backoffPolicy 、backoffDelay |
MTChannelBasedBroker | 取决于底层 Channel |
RabbitMQBroker | deadLetterSink 、retry 、backoffPolicy 、backoffDelay |
注意
deadLetterSink
必须是 GCP Pub/Sub 主题 URI。googlecloud
Broker 仅支持 exponential
退避策略。
配置 Channel 事件传递¶
失败的事件可能会在转发到 deadLetterSink
之前使用扩展属性进行增强,具体取决于使用的特定 Channel 实现。这些扩展属性如下所示
-
knativeerrordest
- 类型:字符串
- 描述:发送失败事件的原始目标 URL。这可以是基于遇到失败事件的操作的
delivery
或reply
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 | 无 |
内存中 | deadLetterSink 、retry 、backoffPolicy 、backoffDelay |
Kafka | deadLetterSink 、retry 、backoffPolicy 、backoffDelay |
Natss | 无 |