操作指南
错误注册表
登录后可跨设备保存划线和私人笔记登录
错误注册表
ErrorRegistry SPI 会捕获消息路由过程中发生的异常快照,其中包括异常本身、Exchange 数据(消息头、消息体、属性、变量)以及消息历史。
启用后,该注册表会存储丰富的错误快照,这些快照既可全局浏览,也可限定在某个特定路由范围内浏览。Exchange 数据是在错误发生时以脱离(detached)快照的形式被捕获的,因此在路由完成后,原始 Exchange 可以安全地被垃圾回收。
启用
错误注册表默认处于禁用状态(需选择启用)。可以通过 Java 启用:
context.getErrorRegistry().setEnabled(true);或者通过配置属性:
camel.errorRegistry.enabled = true配置
| 选项 | 默认值 | 类型 | 说明 |
|---|---|---|---|
camel.errorRegistry.enabled | false | boolean | 是否启用错误注册表。 |
camel.errorRegistry.maximumEntries | 100 | int | 要保留的最大错误条目数。超过该数量时,最旧的条目将被淘汰。 |
camel.errorRegistry.timeToLiveSeconds | 0 | int | 错误条目的存活时间(秒)。超过该时间的条目将被淘汰。默认值为 0(禁用)。 |
camel.errorRegistry.bodyMaxChars | 32768 | int | 快照中消息体的最大字符数。 |
camel.errorRegistry.bodyIncludeStreams | false | boolean | 是否包含基于流的消息体。 |
camel.errorRegistry.bodyIncludeFiles | true | boolean | 是否包含基于文件的消息体。 |
camel.errorRegistry.includeExchangeProperties | true | boolean | 是否在快照中包含 Exchange 属性。 |
camel.errorRegistry.includeExchangeVariables | true | boolean | 是否在快照中包含 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)和捕获选项
- 清除所有条目
评论
登录后参与评论
正在加载评论…
KnowForge