我正在开发一个全新的项目,其中我需要有监听器来消费来自多个队列的消息(目前不需要生产者)。
从头开始,我使用的是最新的 Spring JMS 版本(4.1.2)。
这是我的配置文件的摘录:
<bean id="cachedConnectionFactory"
class="org.springframework.jms.connection.CachingConnectionFactory"
p:targetConnectionFactory-ref="jmsConnectionFactory"
p:sessionCacheSize="3" />
<bean id="jmsListenerContainerFactory"
class="org.springframework.jms.config.DefaultJmsListenerContainerFactory"
p:connectionFactory-ref="cachedConnectionFactory"
p:destinationResolver-ref="jndiDestinationResolver"
p:concurrency="3-5"
p:receiveTimeout="5000" />
但我认为我可能是错的,因为 DefaultJmsListenerContainerFactory 将构建常规的 DefaultMessageListenerContainerS。并且,如 doc 中所述,CachingConnectionFactory 不应与消息侦听器容器一起使用...
感谢您的任何提示
SingleConnectionFactory
并没有多大好处,除非你想在多个容器之间共享单个连接;默认情况下,DMLC
将为所有使用者线程 (cacheLevel >= CACHE_CONNECTION
) 使用来自供应商工厂的单个连接,除非配置了 TransactionManager
。backOff
属性之前 - backOff
只是为重新连接算法增加了更多复杂性 - 它过去只是每 n 秒重试一次(默认为 5 秒)。正如您引用的答案中所述,只要禁用消费者缓存,就可以使用
CCF
。
更正: 是的,当使用
SingleConnectionFactory
时,您需要将reconnectOnException
设置为
true
,以便容器正确恢复其连接。否则,它只会放弃陈旧的连接。