我正在阅读 spring 文档默认消息监听容器 http://docs.spring.io/spring/docs/3.2.7.RELEASE/javadoc-api/org/springframework/jms/listener/DefaultMessageListenerContainer.html
它说“注意:不要将 Spring 的 CachingConnectionFactory 与动态缩放结合使用。理想情况下,根本不要将其与消息侦听器容器一起使用,因为通常最好让侦听器容器本身在其生命周期内处理适当的缓存。此外,停止和重新启动侦听器容器仅适用于独立的本地缓存连接,不适用于外部缓存的连接。”
有人能解释一下为什么吗?
- 您确实不需要为侦听器容器缓存会话,因为会话是长期存在的;缓存对于频繁的短期使用非常有利,例如 JmsTemplate。
- 问题真的是什么时候
cacheConsumers = true
(默认)。当使用动态扩展并且侦听器停止时,会话将返回到缓存,但代理不知道没有人会真正从该会话中消费,因此您会陷入缓存中的消息,直到消息被读取为止当数量增加时,该会话会被重用。
注意:如果您希望JmsTemplate
在容器线程上运行以参与容器事务,您should use a CachingConnectionFactory
因此可以缓存生产者,但是如果您具有可变并发性,则应该在工厂中禁用缓存消费者。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)