首页 > 解决方案 > 使用 JmsListener 的 Spring JMS 消息传递 - 它如何扩展?

问题描述

我正在尝试以可扩展的方式将 Spring JMS 消息与 @JmsListener 一起使用,但我没有看到它发生。我有一个 ConnectionFactory bean,它返回一个通过 JMS 和数据库 DataSource 池连接到 Oracle Advanced Queue 的工厂。

当每个@JmsListener 接收器再次连接到JMS(并因此连接到数据库池)时,问题就开始了。我的理解是我可以有很多 @JmsListener 方法,每个服务一个,但是这样做我非常有限。

共享连接是开启的,但是由于每个@JmsListener 创建一个不同的DefaultMessageListenerContainer,每个都有一个数据库连接。

如果我还希望服务同时处理消息并设置container.setConcurrency("3-5"),那么它会打开3 * numberOfListeners连接。

如果我container.setCacheLevel(DefaultMessageListenerContainer.CACHE_NONE)从每一秒开始使用 then 每个侦听器容器都会与 JMS/数据库连接和断开连接。

我想要将一次(或更多,如果有并发作业要处理)连接到 JMS/数据库的东西,而不是连接侦听器次数,也不是在每一秒为每个侦听器连接断开连接。

标签: springspring-bootspring-jmsspring-messaging

解决方案


您可以使用 aSingleConnectionFactory来包装供应商工厂,并且所有容器都将使用相同的连接。


推荐阅读