在 DefaultMessageListenerContainer 中使用 CachingConnectionFactory 或缓存哪个更好?

Which is better to use CachingConnectionFactory or caching in DefaultMessageListenerContainer?

使用 spring-jms 时,spring 提供了 2 个选项用于连接和会话缓存以提高性能。

  1. 使用 CachingConnectionFactory 并缓存会话,您也可以选择缓存生产者和消费者。
  2. 使用 DefaultMessageListenerContainer 您可以将缓存级别设置为 [1: 连接缓存,2:session 缓存],使用 3 您也可以缓存消费者。

我的问题是,为什么 spring 创建了冗余功能?哪一个在性能方面是最佳且快速的?

缓存工厂专为短期会话而设计,例如使用 JmsTemplate 执行的操作。

侦听器容器通常不需要它(因为它的会话通常是长期存在的),除非您在容器的线程上执行 JmsTemplate 操作 - 以参与容器的事务。

在那种情况下,消费者不应该被工厂缓存,尤其是在使用可变并发的情况下。见 container javadocs.