如何在Tomcat中启用完整消息历史?排查请求转发丢失故障
Tomcat部署第三方应用请求转发丢失故障排查
我正在排查部署在Tomcat上的第三方应用故障——预期会被转发的请求莫名丢失,未按预期完成转发。我已将日志级别设置为FINE,并在tomcat9-stdout.[date].log中看到如下错误信息。想请教:是否可通过修改Tomcat配置启用完整消息历史?这是否是解决该问题的有效方法?
日志信息
localhost_access_log.[date].txt
142.75.24.52 - - [15/May/2024:11:40:07 +1200] "DELETE [url removed] HTTP/1.1" 500 -
tomcat9-stdout.[date].log
2024-05-15 11:40:07:957 +1200 [https-jsse-nio-443-exec-7] ERROR org.apache.camel.processor.errorhandler.DefaultErrorHandler - Failed delivery for (MessageId: ID-[id removed] on ExchangeId: ID-[id removed]). Exhausted after delivery attempt: 1 caught: java.lang.ArrayIndexOutOfBoundsException: 8. Processed by failure processor: FatalFallbackErrorHandler[null] Message History (complete message history is disabled) --------------------------------------------------------------------------------------------------------------------------------------- RouteId ProcessorId Processor Elapsed (ms) [route1 ] [route1 ] [from[servlet:/?httpBinding=awgCamelHttpBinding&matchOnUriPrefix=true] ] [ 20] ... [route1 ] [to1 ] [http://0.0.0.0:0000/?bridgeEndpoint=true&throwExceptionOnFailure=true&urlRewri] [ 0] Stacktrace --------------------------------------------------------------------------------------------------------------------------------------- java.lang.ArrayIndexOutOfBoundsException: 8
问题解答
1. 是否可通过修改Tomcat配置启用完整消息历史?
日志中提示的Message History (complete message history is disabled)是Apache Camel的特性,不属于Tomcat配置范畴。要启用完整消息历史,需修改Camel的配置:
- 代码方式配置Camel上下文:
CamelContext context = new DefaultCamelContext(); context.setMessageHistory(true); context.setStreamCaching(true); // 配合消息历史完整记录流数据 - XML配置方式:
<camelContext xmlns="http://camel.apache.org/schema/spring" messageHistory="true" streamCaching="true"> <!-- 路由定义 --> </camelContext>
2. 这是否是解决该问题的有效方法?
启用完整消息历史是有效的故障排查手段,但不能直接解决问题:
- 完整消息历史会展示请求在Camel路由中经过的所有处理器细节,能帮你精准定位
ArrayIndexOutOfBoundsException发生的具体环节,明确是哪个处理器触发了数组越界错误。 - 当前日志已抛出
java.lang.ArrayIndexOutOfBoundsException: 8,这是请求转发失败的直接原因。启用消息历史后,你能看到错误发生前请求的完整流转路径,辅助定位第三方应用中Camel路由的代码层面问题。
额外排查建议
- 优先针对
ArrayIndexOutOfBoundsException排查:检查Camel路由中涉及数组操作的逻辑,或第三方应用提供的Camel组件是否存在索引越界问题。 - 临时将Camel相关日志级别调整为
DEBUG,获取更详细的路由执行日志,配合消息历史缩小排查范围。
内容的提问来源于stack exchange,提问作者meataxe
相关产品推荐
相关产品推荐

