Java 启用cachedProducers的Spring JMS CachingConnectionFactory

Java 启用cachedProducers的Spring JMS CachingConnectionFactory,java,jms,ibm-mq,spring-jms,Java,Jms,Ibm Mq,Spring Jms,我目前正在进行一个项目来设置spring cachedConnectionFactory sessionCacheSize,请回答为什么sessionCacheSize为1(对于3个目的地)会在每个目的地注册1+(大约3个)JMS缓存消息生成器 应用程序正在事务处理模式下运行,并发线程大小为1 我是否应该研究识别空闲缓存生产者并逐出缓存生产者进行优化的策略 跟踪中不显示线程名称,这使得调试更加困难。然而 生产者/消费者缓存处于会话级。如果您在多个线程上发送消息,那么最终每个缓存会话都会有一个缓存

我目前正在进行一个项目来设置spring cachedConnectionFactory sessionCacheSize,请回答为什么sessionCacheSize为1(对于3个目的地)会在每个目的地注册1+(大约3个)JMS缓存消息生成器

应用程序正在事务处理模式下运行,并发线程大小为1


我是否应该研究识别空闲缓存生产者并逐出缓存生产者进行优化的策略

跟踪中不显示线程名称,这使得调试更加困难。然而

生产者/消费者缓存处于会话级。如果您在多个线程上发送消息,那么最终每个缓存会话都会有一个缓存生产者

  • 线程1签出一个执行发送的会话(缓存一个新的生产者);将会话签回
  • 线程2签出相同的会话;执行发送(使用缓存的生产者)
  • 线程1签出一个不同的会话(因为第一个会话正在使用);执行发送(缓存该目的地/会话的新生产者)
  • 会话中的线程2检查
sessionCacheSize为3(用于3个目的地)


它不是那样工作的;会话不绑定到目的地;它们是常规会话,将缓存用于每个目的地的生产者。

打开连接工厂的跟踪级别日志,以查看生产者缓存的所有活动。是的,我打开了跟踪,这就是为什么我发现,当我的并发线程配置为1编辑问题并添加跟踪日志时,它在每个目标上注册了2次。以下是参数1-并发线程大小、1-会话缓存大小和附加的日志:根据上述注释,我是否应该研究识别空闲缓存生产者并逐出缓存生产者进行优化的策略?我不知道有一种机制可以做到这一点(使用标准工厂)。缓存的生产者与其所属会话的寿命相同。