Camel JMS组件缓存级别和Spring的CachingConnectionFactory

问题描述 投票:0回答:2

根据Apache camel的文档,我们应该将缓存级别设置为CACHE_CONSUMER,以在处理非XA事务时获得更好的性能。大概他们这样做了,因为PooledConnectionFactory不缓存使用者。

代替PooledConnectionFactory,我使用Spring的CachingConnectionFactory,因为PooledConnectionFactory是与ActiveMQ结合使用的,我正在处理IBMMQ。

CachingConnectionFactory另一方面,也缓存生产者和使用者。因此,我希望在这种情况下,将JmsComponent的缓存级别设置为CACHE_CONSUMER是没有意义的。

如果我错了,请纠正我。任何建议都会有很大帮助

apache-camel spring-jms apache-camel-3
2个回答
0
投票

是,我觉得您的理解就在这里。

如本blog的评论之一所述,

尽管PooledConnectionFactoryCachingConnectionFactory声明他们每个池连接,会话和生产者,PooledConnectionFactory不实际上创建了多个生产者的缓存。它只是使用一个单例模式,当一个是要求。而CachingConnectionFactory实际上会创建一个包含多个生产者的缓存,并从中分发一个生产者请求一个时缓存。

通过在使用者级别进行高速缓存,即设置CACHE_CONSUMER,这意味着将缓存连接,会话和使用者。

但是,通过将CachingConnectionFactory用作documented,您可以将使用者和生产者缓存均默认设置为true,并在需要时对其进行控制。因此,不需要更多的缓存级别。

附加帮助:Camel Docs


0
投票

下午好,

您的理解在很大程度上是正确的。请注意,将CACHE_CONSUMER应用于侦听组件时,这意味着Spring JMS消息侦听器应缓存消息使用者(显然是这样)。缓存使用者需要Spring JMS消息侦听器还缓存JMS会话和连接。

如果要使用事务处理的终结点,则必须从Spring JMS消息侦听器中删除此缓存的职责。在事务处理的情况下,您将缓存连接工厂外部化。这就是为什么如果CACHE_NONEtransacted,则级别默认为true的原因。

[将transacted设置为true并提供连接工厂时,将创建一个JMS事务管理器,该管理器与连接工厂一起管理事务。这就是为什么Spring JMS消息侦听器无法管理使用者/会话/连接的原因。

第一个答案是正确的,使用CachingConnectionFactory将为您提供所需的缓存,还将缓存从Spring消息侦听器容器中移出。这使事务管理器可以访问JMS会话。

© www.soinside.com 2019 - 2024. All rights reserved.