积压跟踪器
BacklogTracer
Camel 支持积压跟踪拦截器,用于在消息于 Camel 中路由时捕获每条消息的跟踪信息。跟踪消息会存入积压队列,该队列保存路由中每个节点的最近 N 条消息(默认为 10 条)。
BacklogTracer 与 Tracer 的区别
Camel 还提供了一个 Tracer,其功能与该积压跟踪器类似。区别在于,积压跟踪器会把消息的捕获内容存储在内部积压队列中。
Tracer 基于事件,会在消息发生(或路由到其他 Camel 目的地)时立即记录日志。
如果你只需要在消息发生时记录被跟踪的消息,就应使用 Tracer。
积压跟踪器允许你按需从积压队列中拉取消息。积压跟踪器在支持 JMX 的工具中表现更好,因为它更简单,能够以 POJO 或 XML 格式批量导出所有被跟踪的消息。
选项
| 选项 | 默认值 | 说明 |
|---|---|---|
| standby | false | 追踪器是否处于待机状态。如果追踪器处于待机状态,则会在启动时被激活,并可通过 JMX 或调用 enabled 方法手动启用。 |
| enabled | false | 启用或禁用该追踪器的标志 |
| backlogSize | 100 | 待办队列(FIFO 队列)中保留的已追踪消息的最大总数。应在 1 - 1000 之间。 |
| tracePattern | null | 允许使用匹配节点 id 和路由 id 的模式来过滤追踪。例如,使用 "to1,to2" 只匹配名称为 "to1" 或 "to2" 的节点。可以使用 * 作为通配符。例如,使用 "to*" 匹配任何 to 节点,或使用 "route-foo*" 匹配任何 foo 路由。 |
| traceFilter | null | 允许使用任意 Camel 语言配置一个 谓词作为过滤器。默认使用 Simple 语言。例如,要过滤具有指定 header 的消息,可使用 ${header.foo} != null。要使用 Groovy,请在值前加上 "groovy:" 前缀。其他语言的用法类似。 |
| traceRests | false | 追踪是否应追踪 Rest DSL 的内部细节。开启此选项会包含 Rest DSL 内部路由的事件,从而增加追踪的详细程度。 |
| traceTemplates | false | 追踪是否应追踪路由模板(或 kamelet)的内部细节。开启此选项会包含模板或 kamelet 内部路由的事件,从而增加追踪的详细程度。 |
| removeOnDump | true | 在调用 dump 方法返回已追踪消息后,是否移除这些消息。 |
| bodyMaxChars | 32kb | 限制已追踪消息中消息体的最大大小。使用 0 或负值表示不限制大小。 |
| bodyIncludeStreams | false | 是否包含基于流的消息的消息体。启用后请注意,该流之后可能无法再次读取。更多信息请参阅流缓存。 |
| bodyIncludeFiles | true | 是否包含基于文件的消息的消息体。其开销在于必须从文件中读取文件内容。 |
| includeExchangeProperties | true | 追踪消息时是否包含 Exchange 属性。 |
| includeExchangeVariables | true | 追踪消息时是否包含 Exchange 变量。 |
| includeException | true | 追踪消息时,若消息失败是否包含异常信息。 |
操作
| 选项 | 默认值 | 说明 |
|---|---|---|
| getTraceCounter | long | 获取被跟踪消息的总数。 |
| getQueueSize | long | 积压区中被跟踪消息的数量。 |
| resetTraceCounter | void | 重置跟踪计数器。 |
| dumpTracedMessages(nodeOrRouteId) | List<BacklogTracerEventMessage> | 转储来自给定节点或路由 ID 的被跟踪消息。 |
| dumpTracedMessagesAsXml(nodeOrRouteId) | String | 以 XML 格式转储来自给定节点或路由 ID 的被跟踪消息。 |
| dumpTracedMessagesAsJSon(nodeOrRouteId) | String | 以 JSON 格式转储来自给定节点或路由 ID 的被跟踪消息。 |
| dumpAllTracedMessages | List<BacklogTracerEventMessage> | 转储所有被跟踪消息 |
| dumpAllTracedMessagesAsXml | String | 以 XML 格式转储所有被跟踪消息。 |
| dumpAllTracedMessagesAsJSon | String | 以 JSON 格式转储所有被跟踪消息。 |
启用
你可以在 CamelContext 上开启积压跟踪功能。
camelContext.setBacklogTracing(true);而在 Spring XML 中
<camelContext backlogTrace="true">
...
</camelContext>而在 Camel Main 中,你可以在 application.properties 文件中启用此功能:
camel.trace.enabled = true在 Spring Boot 中,可以在 application.properties 文件里启用此功能:
camel.trace.enabled = true追踪 InputStream 类型的负载
请注意,当启用 backlog 跟踪且消息负载为流式类型(例如 java.io.InputStream)时,backlog tracer 会读取该负载并复制一份作为 trace 存储到 backlog tracer 中,随后监控工具便可以查看这些 traced 事件。
在处理 InputStream 类型时,Camel 提供了 Stream caching(流缓存)机制,它能自动使此类类型变得 安全 可用,因为这些内容会被缓存并支持 重新读取。详情请参见 Stream caching。
不过,Camel 的流缓存仅适用于消息体。对于 InputStream 类型的消息头则不建议使用,这种用法也并不常见。如果您要添加自定义消息头,建议不要使用流式类型,而应将这些消息头转换为 String、byte[] 或其他驻留在内存中、可安全 重新读取 的标准 Java 类型。
评论
登录后参与评论
KnowForge