【问题标题】:Spring JMS CachingConnectionFactory with cachedProducers enabled启用了 cachedProducers 的 Spring JMS CachingConnectionFactory
【发布时间】:2017-04-29 04:01:15
【问题描述】:

我目前正在做一个项目来设置 spring cachedConnectionFactory sessionCahceSize,请回答为什么 sessionCacheSize 为 1(对于 3 个目标)会为每个目标注册 1+(大约 3)个 JMS 缓存消息生产者?

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

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

【问题讨论】:

  • 为连接工厂打开 TRACE 级别的日志记录,以查看有关生产者缓存的所有活动。
  • 是的,我打开了跟踪,这就是我发现当我的并发线程配置为 1 时每个目标注册 2 次的原因
  • 编辑问题并添加您的跟踪日志。
  • 这里是参数
  • 1 - 并发线程大小,1 - 会话缓存大小并附上日志:

标签: java jms ibm-mq spring-jms


【解决方案1】:

您没有在跟踪中显示线程名称,这使得调试变得更加困难。不过……

生产者/消费者缓存位于Session 级别。如果您在多个线程上发送消息,您最终可以为每个缓存会话创建一个缓存生产者。

  • 线程 1 检查会话是否发送(缓存新的生产者);重新签入会话。
  • 线程 2 签出同一个会话;发送(使用缓存的生产者)。
  • 线程 1 签出不同的会话(因为第一个会话正在使用中);进行发送(为该目标/会话缓存新的生产者)。
  • 会话中的线程 2 检查

sessionCacheSize 为 3(用于 3 个目的地)

这样不行;会话与目的地无关;它们是通用会话,将为每个目标缓存一个生产者。

【讨论】:

  • 基于上面的cmets,是不是要研究一下识别空闲缓存生产者并驱逐缓存生产者优化的策略?
  • 我不知道这样做的机制(使用标准工厂)。缓存的生产者与他们拥有的 Session 一样长。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-18
  • 2014-10-12
  • 2014-08-21
  • 2013-09-22
  • 2018-04-12
  • 2011-11-23
相关资源
最近更新 更多