1.4. 处理连接中的错误
要指定如果正在运行的集成在发送或接收事件数据时遇到失败,您可以选择性地在 Kamelet Binding 中添加以下错误处理策略之一:
- 无错误处理程序 - Ignores 的集成中出现的任何故障。
- 日志错误处理程序 - 发送日志消息到标准输出。
- 死信频道错误处理程序 - 将失败的事件重定向到另一个组件,如第三方 URI、队列或其他 Kamelet,它们可以在失败事件中执行某些逻辑。还支持尝试恢复消息在将消息发送到死信端点前多次交换。
- bean 错误处理程序 - 指定使用自定义 bean 来处理错误。
- ref error handler - 指定使用 bean 来处理错误。bean 必须在运行时在 Camel 注册表中可用。
1.4.1. 在 Kamelet Binding 中添加错误处理程序策略
要在源和目标连接之间发送或接收事件数据时处理错误,请在 Kamelet Binding 中添加错误处理程序策略。
先决条件
- 您知道您要使用的错误处理程序策略类型。
-
您有一个现有的
KameletBinding
YAML 文件。
流程
在 Kamelet Binding 中实施错误处理:
-
在编辑器中打开
KameletBinding
YAML 文件。 在
sink
定义后,在spec
部分添加一个 error handler 部分:apiVersion: camel.apache.org/v1alpha1 kind: KameletBinding metadata: name: example-kamelet-binding spec: source: ... sink: ... errorHandler: ...
例如,在
coffee-to-log
Kamelet Binding 中,通过添加日志错误处理程序来指定错误发送到日志文件的最大次数:apiVersion: camel.apache.org/v1alpha1 kind: KameletBinding metadata: name: coffee-to-log spec: source: ref: kind: Kamelet apiVersion: camel.apache.org/v1alpha1 name: coffee-source properties: period: 5000 sink: ref: kind: Kamelet apiVersion: camel.apache.org/v1alpha1 name: log-sink errorHandler: log: parameters: maximumRedeliveries: 3
- 保存您的文件。
1.4.2. 错误处理程序
1.4.2.1. 没有错误处理程序
如果要忽略集成中发生的任何失败,则无法在 Kamelet Binding 中包含 errorHandler
部分,或者将其设置为 none,如下例所示:
apiVersion: camel.apache.org/v1alpha1
kind: KameletBinding
metadata:
name: my-kamelet-binding
spec:
source:
...
sink:
...
errorHandler:
none:
1.4.2.2. 日志错误处理程序
处理任何失败的默认行为是将日志消息发送到标准输出。另外,您可以使用日志错误处理程序指定其他行为,如重新发送或延迟策略,如下例所示:
apiVersion: camel.apache.org/v1alpha1 kind: KameletBinding metadata: name: my-kamelet-binding spec: source: ... sink: ... errorHandler: log: parameters: maximumRedeliveries: 3 redeliveryDelay: 2000
1.4.2.3. 死信频道错误处理程序
Dead Letter Channel 允许您将任何失败的事件重定向到可处理失败的事件的任何其他组件(如第三方 URI、队列或其他 Kamelet),如以下示例所示:
apiVersion: camel.apache.org/v1alpha1 kind: KameletBinding metadata: name: my-kamelet-binding spec: source: ... sink: ... errorHandler: dead-letter-channel: endpoint: ref: 1 kind: Kamelet apiVersion: camel.apache.org/v1alpha1 name: error-handler properties: 2 message: "ERROR!" ... parameters: 3 maximumRedeliveries: 1
-
对于 端点,您可以使用
ref
或uri
。根据kind
,apiVersion
和name
的值的 Camel K operator interpretsref
。您可以使用任何 Kamelet、Kafka 主题频道或 Knative 目的地。 -
属于端点的属性(本例中为一个名为
error-handler
的 Kamelet)。 - 属于 dead-letter-channel 错误处理程序类型 的参数。
1.4.2.4. Bean 错误处理程序
使用 Bean 错误处理程序,您可以通过提供处理错误的自定义 bean 来扩展 Error Handler 的功能。对于 类型
,请指定 ErrorHandlerBuilder
的完全限定名称。对于 属性
,请配置您在 类型
中指定的 ErrorHandlerBuilder
所期望的属性。
apiVersion: camel.apache.org/v1alpha1 kind: KameletBinding metadata: name: my-kamelet-binding spec: source: ... sink: ... errorHandler: bean: type: "org.apache.camel.builder.DeadLetterChannelBuilder" properties: deadLetterUri: log:error
1.4.2.5. ref 错误处理程序
使用 Ref 错误处理程序,您可以使用在运行时 Camel registry 中预期可用的任何 bean。在以下示例中,my-custom-builder
是要查看运行时的 bean 的名称。
apiVersion: camel.apache.org/v1alpha1
kind: KameletBinding
metadata:
name: my-kamelet-binding
spec:
source:
...
sink:
...
errorHandler:
ref: my-custom-builder
另请参阅: