我在 IBM MQ Series 队列上有一个 Spring Integration JMS 轮询器。当使用 IBM MQ Explorer(IBM 的基于 Eclipse 的队列浏览器应用程序)并查看队列的状态时,我看到应用程序的队列句柄状态在每个轮询周期中出现/消失。这是预期的行为吗?是否可以在轮询之间保留队列会话?
示例代码为;
IntegrationFlows.from(
Jms.inboundAdapter(connectionFactory).destination(myQueue),
e -> e.poller(Pollers.fixedDelay(Duration.ofMillis(1000)))
)
.log(INFO, "Read Queue " + myQueue, m -> m)
.channel(myDirectChannel)
.get();
使用 spring-integration-jms 5.5.7 和 com.ibm.mq.allclient 9.1.5。
实际上,是的 - 这是预期的行为。在最简单的场景中,会为每条消息创建、使用和删除整个 JMS 连接和会话。这显然是非常低效的。
您可以使用缓存连接工厂来外部化 JMS 连接和会话的管理,以避免这种行为。