操作指南

错误注册表

师成师成· 更新于 2026-09-28· 阅读 6 分钟· 0 次阅读

登录后可跨设备保存划线和私人笔记登录

错误注册表

ErrorRegistry SPI 会捕获消息路由过程中发生的异常快照,其中包括异常本身、Exchange 数据(消息头、消息体、属性、变量)以及消息历史。

启用后,该注册表会存储丰富的错误快照,这些快照既可全局浏览,也可限定在某个特定路由范围内浏览。Exchange 数据是在错误发生时以脱离(detached)快照的形式被捕获的,因此在路由完成后,原始 Exchange 可以安全地被垃圾回收。

启用

错误注册表默认处于禁用状态(需选择启用)。可以通过 Java 启用:

context.getErrorRegistry().setEnabled(true);

或者通过配置属性:

camel.errorRegistry.enabled = true

配置

选项默认值类型说明
camel.errorRegistry.enabledfalseboolean是否启用错误注册表。
camel.errorRegistry.maximumEntries100int要保留的最大错误条目数。超过该数量时,最旧的条目将被淘汰。
camel.errorRegistry.timeToLiveSeconds0int错误条目的存活时间(秒)。超过该时间的条目将被淘汰。默认值为 0(禁用)。
camel.errorRegistry.bodyMaxChars32768int快照中消息体的最大字符数。
camel.errorRegistry.bodyIncludeStreamsfalseboolean是否包含基于流的消息体。
camel.errorRegistry.bodyIncludeFilestrueboolean是否包含基于文件的消息体。
camel.errorRegistry.includeExchangePropertiestrueboolean是否在快照中包含 Exchange 属性。
camel.errorRegistry.includeExchangeVariablestrueboolean是否在快照中包含 Exchange 变量。

捕获的数据

每条错误条目会捕获:

  • Exchange ID — 唯一的交换(Exchange)标识符
  • Route ID — 发生错误的路由(如果交换被路由经过多个路由,可能与 from 路由不同)
  • From Route ID — 创建该交换的源路由(即消费者路由)
  • Route Group — 发生错误的路由所属的路由组(如果已设置)
  • Node ID — 处理失败的 EIP 处理器节点
  • Location — 失败节点的源文件位置(例如 "MyRoute.java:42"),需要启用源码位置功能
  • Endpoint URI — 发生失败时交换正在发送到的生产者端点。如果错误发生在任何发送尝试之前(例如路由中直接调用 throwException),该值可能为 null。这不指路由的消费者(from)端点。
  • Timestamp — 错误发生的时间(自纪元以来的毫秒数)
  • Exception — 完整的异常实例,包括类型、消息和堆栈跟踪
  • Handled — 该错误是否已被错误处理器处理(例如死信通道、onException),或者尚未处理
  • Message data — 交换消息的独立 JSON 快照(消息体、消息头,以及可选的属性和变量)
  • Message history — 消息在失败点之前经过的所有节点的路由跟踪记录(需要启用消息历史功能)
  • Processing thread — 错误发生时正在处理该交换的线程名称

消息历史

当在 CamelContext 上启用消息历史后,错误注册表还会为每个错误捕获消息历史跟踪记录。它会显示消息在失败点之前经过的所有节点,对调试非常有用。

开发控制台

提供了一个名为 errors 的开发控制台,用于浏览已捕获的错误。

选项:

  • routeId — 按路由 ID 过滤
  • limit — 限制显示的条目数量
  • stackTrace — 设置为 true 以在输出中包含堆栈跟踪(堆栈跟踪默认会被捕获,但除非设置此选项,否则不会显示,以保持输出简洁)

JMX

当启用 JMX 时,会注册一个 JMX MBean(ManagedErrorRegistry),提供以下操作:

  • 启用/禁用错误注册表
  • 浏览错误条目(全局或按路由)
  • 配置最大条目数、生存时间(TTL)和捕获选项
  • 清除所有条目

评论

登录后参与评论

正在加载评论…