根据Apache camel的文档,我们应该将缓存级别设置为CACHE_CONSUMER,以在处理非XA事务时获得更好的性能。大概他们这样做了,因为PooledConnectionFactory不缓存使用者。
代替PooledConnectionFactory,我使用Spring的CachingConnectionFactory,因为PooledConnectionFactory是与ActiveMQ结合使用的,我正在处理IBMMQ。
CachingConnectionFactory另一方面,也缓存生产者和使用者。因此,我希望在这种情况下,将JmsComponent的缓存级别设置为CACHE_CONSUMER是没有意义的。
如果我错了,请纠正我。任何建议都会有很大帮助
是,我觉得您的理解就在这里。
如本blog的评论之一所述,
尽管
PooledConnectionFactory
和CachingConnectionFactory
声明他们每个池连接,会话和生产者,PooledConnectionFactory
不实际上创建了多个生产者的缓存。它只是使用一个单例模式,当一个是要求。而CachingConnectionFactory
实际上会创建一个包含多个生产者的缓存,并从中分发一个生产者请求一个时缓存。
通过在使用者级别进行高速缓存,即设置CACHE_CONSUMER
,这意味着将缓存连接,会话和使用者。
但是,通过将CachingConnectionFactory
用作documented,您可以将使用者和生产者缓存均默认设置为true
,并在需要时对其进行控制。因此,不需要更多的缓存级别。
附加帮助:Camel Docs
下午好,
您的理解在很大程度上是正确的。请注意,将CACHE_CONSUMER
应用于侦听组件时,这意味着Spring JMS消息侦听器应缓存消息使用者(显然是这样)。缓存使用者需要Spring JMS消息侦听器还缓存JMS会话和连接。
如果要使用事务处理的终结点,则必须从Spring JMS消息侦听器中删除此缓存的职责。在事务处理的情况下,您将缓存连接工厂外部化。这就是为什么如果CACHE_NONE
为transacted
,则级别默认为true
的原因。
[将transacted
设置为true
并提供连接工厂时,将创建一个JMS事务管理器,该管理器与连接工厂一起管理事务。这就是为什么Spring JMS消息侦听器无法管理使用者/会话/连接的原因。
第一个答案是正确的,使用CachingConnectionFactory
将为您提供所需的缓存,还将缓存从Spring消息侦听器容器中移出。这使事务管理器可以访问JMS会话。