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

Apache Camel路由处理IBM MQ消息出现严重延迟问题排查

问题排查:IBM MQ队列监听器消息拾取延迟问题

问题背景

我们有一款用于模拟微服务跨端点交互的测试工具,其中一个模拟服务是基于Apache Camel路由构建的IBM MQ队列监听器。该服务收到消息后会生成3个关联响应并发送回响应队列,单条消息正常处理仅需10-20毫秒。

在性能测试中,我们向应用注入消息,由应用与该模拟服务交互。当前每秒约60条消息的负载并不算高,但从应用日志来看,消息在请求队列中等待被模拟服务拾取的时间过长,直接导致性能下降。

我们已部署6个作为ECS任务的测试工具实例,每个实例的并发消费者数从最初的1依次调整到3、10、20,但消息拾取延迟的改善效果并不明显,需要排查问题根源。

消息消费采用非XA事务型,并使用Spring的CachingConnectionFactory包装MQQueueConnectionFactory,会话缓存大小设置为500。

更新补充信息

Apache Camel路由定义

from("jms:my.request.queue?concurrentConsumers=20&disableReplyTo=true")
    .routeId("my-stub")
    .autoStartup(true)
    .policy(somePlatformTransactionPolicy)
    .process(...)
    // 一系列内存内处理的processor
    .to("jms.my.response.queue")

底层组件说明

Apache Camel JMS组件底层使用Spring JmsTemplate发送消息,使用Spring MessageListenerContainer消费消息。经确认,实际使用的是Spring DefaultMessageListenerContainer的扩展类DefaultJmsMessageListenerContainer,该类继承自AbstractPollingMessageListenerContainer,基于轮询机制工作,相关实现代码如下:

/**
 * 默认的{@link DefaultMessageListenerContainer 容器},用于监听JMS目标的消息。
 * <p/>
 * 该实现扩展了Spring的{@link DefaultMessageListenerContainer},支持自动恢复和流量控制。
 */
public class DefaultJmsMessageListenerContainer extends DefaultMessageListenerContainer {

内容的提问来源于stack exchange,提问作者Julian

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 22:12:24