为什么 JmsListeners 不能共享公共 Jms 连接?

问题描述

我以这种方式创建了一个消息处理程序:

@JmsListeners(
  JmsListener(destination = "queue1"),JmsListener(destination = "queue2"),JmsListener(destination = "queue3"),JmsListener(destination = "queue4")
)
fun handleMessage(message: String) {
  // handle a message
}

当我检查我的消息代理时,我看到我的应用已经建立了 4 个连接。 不幸的是,我对来自 MQ 管理员的连接数量有限制,因此我希望消息处理程序仅使用 1 个连接。

在检查 Spring Jms 内部之后,我发现 DefaultMessageListenerContainer has an ability to use a shared connection。但问题是 Spring 的 DefaultMessageListenerContainerFactory 为每个 DefaultMessageListenerContainer 创建了一个单独的 @JmsListener

同时,JMS API 允许从单个 JMSConsumer 创建多个 JMSContext,例如

val jmsContext = connectionFactory.createContext(Session.SESSION_TRANSACTED)
val consumer1 = jmsContext.createConsumer(jmsContext.createQueue("queue1"))
val consumer2 = jmsContext.createConsumer(jmsContext.createQueue("queue2"))

如何设置 JmsListener 以共享公共连接?如果这是不可能的,Spring 是否有合理的理由?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)