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 中添加错误处理程序策略。

先决条件

  • 您知道您要使用的错误处理程序策略类型。
  • 您有一个现有的 KameletBinding YAML 文件。

流程

在 Kamelet Binding 中实施错误处理:

  1. 在编辑器中打开 KameletBinding YAML 文件。
  2. 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
  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: 
1

          kind: Kamelet
          apiVersion: camel.apache.org/v1alpha1
          name: error-handler
        properties: 
2

          message: "ERROR!"
          ...
      parameters: 
3

        maximumRedeliveries: 1
  1. 对于 端点,您可以使用 refuri。根据 kind, apiVersionname 的值的 Camel K operator interprets ref。您可以使用任何 Kamelet、Kafka Topic 频道或 Knative 目的地。
  2. 属于端点的属性(本例中为一个名为 error-handler 的 Kamelet)。
  3. 属于 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
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2026 Red Hat
返回顶部