我正在尝试以可扩展的方式将Spring JMS消息传递与@JmsListener一起使用,但是我没有看到它的发生。我有一个ConnectionFactory bean,它返回一个通过JMS和数据库数据源池连接到Oracle Advanced Queue的工厂。
随着每个@JmsListener接收器再次连接到JMS(并因此连接到数据库池),问题开始了。我的理解是,我可以有很多@JmsListener方法,每个服务一个方法,但是通过这种方式,我的能力非常有限。
共享连接已打开,但是由于每个@JmsListener创建一个不同的DefaultMessageListenerContainer,因此每个都有一个数据库连接。
如果我还希望服务同时处理消息并设置container.setConcurrency("3-5")
,则它将打开3 * numberOfListeners
连接。
如果我使用container.setCacheLevel(DefaultMessageListenerContainer.CACHE_NONE)
,则每个侦听器容器每秒都会连接JMS /数据库并与之断开连接。
我想要一种将一次(或多次,如果要处理并发作业)连接到JMS /数据库的东西,而不是连接侦听器次数,也不要在每个侦听器每秒连接或断开连接。
答案 0 :(得分:0)
您可以使用SingleConnectionFactory
包装供应商工厂,所有容器将使用相同的连接。