Camel JMS 组件缓存级别和 Spring 的 CachingConnectionFactory
Camel JMS Component cache level and Spring's CachingConnectionFactory
根据 Apache camel 的文档,我们应该将缓存级别设置为 CACHE_CONSUMER 以在处理非 XA 事务时获得更好的性能。
可能他们这样做了,因为 PooledConnectionFactory 不缓存消费者。
我正在使用 Spring 的 CachingConnectionFactory 代替 PooledConnectionFactory,因为 PooledConnectionFactory 与 ActiveMQ 相结合,而我正在处理 IBMMQ。
另一方面,CachingConnectionFactory 也缓存生产者和消费者。
所以我希望在这种情况下,将 JmsComponent 的缓存级别设置为 CACHE_CONSUMER.
没有意义
如有错误请指正。
任何建议都会有很大帮助
是的,我感觉你理解到这里了。
如本 blog 的评论之一所述,
Although both the PooledConnectionFactory
and the
CachingConnectionFactory
state that they each pool connections,
sessions and producers, the PooledConnectionFactory
does not
actually create a cache of multiple producers. It simply uses a
singleton pattern to hand out a single cached producer when one is
requested. Whereas the CachingConnectionFactory
actually creates a
cache containing multiple producers and hands out one producer from
the cache when one is requested.
通过在消费者级别缓存,即设置 CACHE_CONSUMER
,这意味着连接、会话和消费者都被缓存。
但是,通过使用 CachingConnectionFactory
,如 documented,您可以将消费者和生产者缓存默认设置为 true
,并在需要时获得对它们的控制权。因此不需要更多的缓存级别。
其他帮助:
Camel Docs
下午好,
你的理解基本正确。请注意,当您将 CACHE_CONSUMER
应用于侦听组件时,这意味着 Spring JMS 消息侦听器应该缓存消息使用者(有点明显)。缓存使用者需要 Spring JMS 消息侦听器也缓存 JMS 会话和连接。
如果您想使用事务处理端点,则必须从 Spring JMS 消息侦听器中移除此缓存的责任。在事务处理的情况下,您将缓存连接工厂外部化。这就是如果 transacted
为 true
时级别默认为 CACHE_NONE
的原因。
当您将 transacted
设置为 true
并提供连接工厂时,将创建一个与连接工厂一起管理事务的 JMS 事务管理器。这就是 Spring JMS 消息侦听器无法管理 consumer/session/connection.
的原因
第一个答案是正确的,使用 CachingConnectionFactory
将使您获得所需的缓存,并且还将缓存从 Spring 消息侦听器容器中外部化。这允许事务管理器访问 JMS 会话。
根据 Apache camel 的文档,我们应该将缓存级别设置为 CACHE_CONSUMER 以在处理非 XA 事务时获得更好的性能。 可能他们这样做了,因为 PooledConnectionFactory 不缓存消费者。
我正在使用 Spring 的 CachingConnectionFactory 代替 PooledConnectionFactory,因为 PooledConnectionFactory 与 ActiveMQ 相结合,而我正在处理 IBMMQ。
另一方面,CachingConnectionFactory 也缓存生产者和消费者。 所以我希望在这种情况下,将 JmsComponent 的缓存级别设置为 CACHE_CONSUMER.
没有意义如有错误请指正。 任何建议都会有很大帮助
是的,我感觉你理解到这里了。
如本 blog 的评论之一所述,
Although both the
PooledConnectionFactory
and theCachingConnectionFactory
state that they each pool connections, sessions and producers, thePooledConnectionFactory
does not actually create a cache of multiple producers. It simply uses a singleton pattern to hand out a single cached producer when one is requested. Whereas theCachingConnectionFactory
actually creates a cache containing multiple producers and hands out one producer from the cache when one is requested.
通过在消费者级别缓存,即设置 CACHE_CONSUMER
,这意味着连接、会话和消费者都被缓存。
但是,通过使用 CachingConnectionFactory
,如 documented,您可以将消费者和生产者缓存默认设置为 true
,并在需要时获得对它们的控制权。因此不需要更多的缓存级别。
其他帮助: Camel Docs
下午好,
你的理解基本正确。请注意,当您将 CACHE_CONSUMER
应用于侦听组件时,这意味着 Spring JMS 消息侦听器应该缓存消息使用者(有点明显)。缓存使用者需要 Spring JMS 消息侦听器也缓存 JMS 会话和连接。
如果您想使用事务处理端点,则必须从 Spring JMS 消息侦听器中移除此缓存的责任。在事务处理的情况下,您将缓存连接工厂外部化。这就是如果 transacted
为 true
时级别默认为 CACHE_NONE
的原因。
当您将 transacted
设置为 true
并提供连接工厂时,将创建一个与连接工厂一起管理事务的 JMS 事务管理器。这就是 Spring JMS 消息侦听器无法管理 consumer/session/connection.
第一个答案是正确的,使用 CachingConnectionFactory
将使您获得所需的缓存,并且还将缓存从 Spring 消息侦听器容器中外部化。这允许事务管理器访问 JMS 会话。