1.4. 处理连接中的错误
要指定在发送或接收事件数据时正在运行的集成遇到故障时应该做什么,您可以选择将以下错误处理策略之一添加到 Kamelet Binding 中:
- 没有错误处理程序 - 忽略集成中发生的所有故障。
- 日志错误处理程序 - 向标准输出发送日志消息。
- 死信频道错误处理程序 - 将失败事件重定向到另一个组件,如第三方 URI、队列或其他 Kamelet,它们可以通过失败事件执行某些逻辑。还支持在将消息发送到死信端点之前尝试恢复消息交换次数。
- bean 错误 handler - specifys,以使用自定义 bean 处理错误。
- ref error handler - specifys 使用 bean 进行处理错误。Bean 在运行时必须在 Camel registry 中提供。
1.4.1. 将错误处理程序策略添加到 Kamelet Binding 复制链接链接已复制到粘贴板!
要在源和接收器连接间发送或接收事件数据时处理错误,请在 Kamelet Binding 中添加错误处理程序策略。
先决条件
- 您知道您要使用的错误处理程序策略类型。
-
您有一个现有的
KameletBindingYAML 文件。
流程
在 Kamelet Binding 中实施错误处理:
-
在编辑器中打开
KameletBindingYAML 文件。 在
sink定义后,在spec部分添加 error handler 部分:apiVersion: camel.apache.org/v1alpha1 kind: KameletBinding metadata: name: example-kamelet-binding spec: source: ... sink: ... errorHandler: ...例如,在
coffee-to-logKamelet 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. 死信频道错误处理程序 复制链接链接已复制到粘贴板!
死信频道允许您将任何失败事件重定向到任何其他组件(如第三方 URI、队列或其他 Kamelet),用于定义如何处理失败事件,如下例所示:
apiVersion: camel.apache.org/v1alpha1
kind: KameletBinding
metadata:
name: my-kamelet-binding
spec:
source:
...
sink:
...
errorHandler:
dead-letter-channel:
endpoint:
ref:
kind: Kamelet
apiVersion: camel.apache.org/v1alpha1
name: error-handler
properties:
message: "ERROR!"
...
parameters:
maximumRedeliveries: 1
-
对于 端点,您可以使用
ref或uri。根据kind,apiVersion和name的值的 Camel K operator interpretsref。您可以使用任何 Kamelet、Kafka Topic 频道或 Knative 目的地。 -
属于端点的属性(本例中为一个名为
error-handler的 Kamelet)。 - 属于 dead-letter-channel 错误处理程序类型 的参数。
1.4.2.4. Bean 错误处理程序 复制链接链接已复制到粘贴板!
使用 Bean 错误处理程序,您可以通过提供处理错误的自定义 Bean 来扩展 Error Handler 的功能。对于 类型,指定 ErrorHandlerBuilder 的完全限定名称。对于 属性,请配置您在 type 中指定的 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
另请参阅: