Spring boot MQ CachingConnectionFactory会话缓存不工作

Spring boot MQ CachingConnectionFactory会话缓存不工作,spring-boot,jms,ibm-mq,spring-jms,Spring Boot,Jms,Ibm Mq,Spring Jms,我有一些限制,我只能有一个kafka主题的分区,我可以监听,并且仍然需要提高消息处理的吞吐量,并在处理过程中最终发送消息MQ 所以,一旦我在kafkaListener中接收到消息,我就使用Asycn进行进一步处理(即将消息存储在Db中,然后发布到MQ) 问题我看到会话缓存不工作,因为一旦我从kafkalistner读取,它就会打开新线程来做进一步的工作,一旦它到达JMS发送方法,在某个点之后,我会以MQ错误“最大连接达到通道容量”结束MQRC 2537 不确定会出现什么问题,我使用com.ibm

我有一些限制,我只能有一个kafka主题的分区,我可以监听,并且仍然需要提高消息处理的吞吐量,并在处理过程中最终发送消息MQ

所以,一旦我在kafkaListener中接收到消息,我就使用Asycn进行进一步处理(即将消息存储在Db中,然后发布到MQ)

问题我看到会话缓存不工作,因为一旦我从kafkalistner读取,它就会打开新线程来做进一步的工作,一旦它到达JMS发送方法,在某个点之后,我会以MQ错误“最大连接达到通道容量”结束MQRC 2537

不确定会出现什么问题,我使用com.ibm.mq/mqjmsspringbootstarter作为依赖项

我已经将会话缓存设置为20,将异步设置为30,这是否意味着如果所有30个线程任务几乎同时出现,它仍将尝试创建10个JMS连接

我对SessionCache的理解是,只会创建许多max会话连接。在30个线程中,有10个线程需要等待JMS会话可用


请协助,我们使用的是Spring boot

我认为这里的问题是您最终打开的连接太多。所有池都是由SpringJMS在后台为您完成的,您的池大小似乎超过了通道配置的连接数

您需要通过减少连接池来施加限制。您可以为
mqjmsspringbootstarter
设置缓存属性。看

例如


您需要为您的环境确定合理的值。

**来自JMS配置**公共缓存连接工厂(){.setSessionCache(10)//尝试将会话缓存设置为10}**JMS模板**公共JmsTemplate(){JmsTemplate在CachingConnectionFactory上面使用}@KafkaListener(由于某些原因,具有1个分区的主题无法增加分区){try{调用某个服务类say Aservice,然后从那里我们调用DB insertion和MQ put(JMS send)}Catch{}}Aservice.class{@Async public void execute(param){//1)Db插入//2)我们称之为jmsTemplate发送(到队列)}你在评论中的所有内容都应该添加到代码块中的问题中。请在@JoshMc请求时将你的代码添加到你的问题中!连接不足表示你没有关闭它们,或者同时出现多个线程。我希望你已经让spring为你的应用分配了一个池,但你的应用确实如此需要释放它们并将它们返回池中。
ibm.mq.pool.enabled=true
ibm.mq.pool.maxConnections=5
ibm.mq.pool.blockIfFull=true
ibm.mq.pool.blockIfFullTimeout=60