Camel 2.15.4:HTTP端点无响应致JMS队列堆积,需设置超时参数
问题描述
我们在Karaf OSGI服务器中使用Camel与ActiveMQ,构建了从JMS队列取消息并转发至HTTPS端点的路由,代码如下:
from(fromURI).autoStartup(true) .onException(Throwable.class).handled(true).maximumRedeliveries(0) .to("bean:our.own.OutputErrorHandler").end() .log(LoggingLevel.INFO, "Received batch to Output for Queue: " + queue.getName()) .setHeader(Exchange.HTTP_METHOD, constant("POST")) .setHeader(Exchange.CONTENT_TYPE, constant("application/json")) .to("log:DEBUG?showBody=true&showHeaders=true") .to(outputURI) .to("log:DEBUG?showBody=true&showHeaders=true") .routeId(queue.getName() + "-Output-HTTP") .end();
其中fromURI格式类似jms:queue:201.output,outputURI为HTTPS端点地址。目前路由运行正常,但偶尔目标HTTP端点既不返回也不断开连接,导致整个路由阻塞,JMS队列消息持续堆积。
解决方案(Camel 2.15.4版本)
需要在HTTPS端点的outputURI中添加以下超时参数:
socketTimeout:设置读取响应数据的超时时间(单位:毫秒),超过该时间未收到端点响应时,会触发IOException,终止当前请求并触发异常处理逻辑。connectionTimeout:设置建立HTTP连接的超时时间(单位:毫秒),避免在连接阶段长时间阻塞。
修改后的outputURI示例:
https://your-target-endpoint.com/api?socketTimeout=30000&connectionTimeout=10000
(上述示例设置30秒响应读取超时、10秒连接超时,可根据实际需求调整数值)
添加参数后,当目标端点无响应时,Camel会在超时后抛出异常,被路由中配置的onException处理器捕获,将消息转至OutputErrorHandler处理,不会阻塞路由,避免JMS队列消息堆积。
内容的提问来源于stack exchange,提问作者DuncanKinnear
相关产品推荐
相关产品推荐

