You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 17:52:49