我们使用Spring的DefaultMessageListenerContainer
提取和处理MQ通知来解决生产中的问题。
我们认为基础TCP / IP连接的数量可能是个问题。
我需要更好地了解IBM MQ客户端和Spring JMS如何创建TCP / IP连接。
详细信息:
我们正在使用DefaultMessageListenerContainer
从IBM MQ中提取消息。
我们正在使用SingleConnectionFactory
使用一个共享的JMS连接,并正在使用CACHE_SESSION
每个线程拥有一个JMS会话。
将concurrentConsumers
设置为10
,将maxConcurrentConsumers
设置为20
。
我希望在负载为20 maxConcurrentConsumers
的高负载下,我们将有20条打开的TCP / IP连接到队列管理器,但似乎比这还要高。我当时以为每个JMS会话只有一个TCP / IP连接,但是我认为这是一个有缺陷的理解。
(实际上,我们有5个不同的MQ通道来使用和应用10-20个使用者的相同配置,并且在正常音量下坐拥330个TCP / IP连接。随着时间的流逝,我会一直对此趋势发展,但我相信它会在另外,在5个MQ通道中,有2个通道的容量比其他3个通道的容量大,这些是我需要关注的通道,我需要集中精力并增加这些通道,同时可能减少其他通道,但是接下来的效果将大致相同) / p>
我们目前正在测试各种配置选项并进行负载测试,以了解我们可以发现的内容。
主要问题似乎是,我们可能说了10分钟,在那里我们无法处理任何事情,然后我们会自动恢复,但是数量如此之多,以至于我们需要很长时间才能恢复最新状态,这会影响SLA。
具体来说,我们整天都会看到类似以下的错误:
JMSCMQ0001 IBM MQ call failed with compcode '2' ('MQCC_FAILED') reason '2538' ('MQRC_HOST_NOT_AVAILABLE')
Spring恢复输出“成功刷新JMS连接”,但是如上所述,我们每周遇到几次这种情况,因此MQ消息的数量无法赶上maxConcurrentConsumers
。