jms容器的并发最佳值

时间:2019-07-05 11:53:30

标签: jms messaging spring-jms

<jms:listener-container container-type="default"
    connection-factory="testConnectionFactory"
    acknowledge="auto"
    concurrency="10">
    <jms:listener destination="test_queue" ref="testRequestHandler" method="getMessage" />
</jms:listener-container>

因此,我定义了jms连接工厂,并发设置为10,并且我的使用者一次可以同时使用10条消息。现在,问题在于生产者对消息的排队速度快于消费者可以消耗的速度,结果导致一半的消息在队列中过期。

  1. 我可以增加消息TTL,以便它们在队列中保持更长的时间而不会过期。
  2. 增加并发使用者的并发值。

我面临的问题是:

  1. 我不知道增加并发值将如何影响系统?
  2. 我可以将其价值提高多少?这个概念类似于线程池中的线程数吗?

1 个答案:

答案 0 :(得分:1)

我认为您要达到最佳值的唯一方法是:

  • 建立明确的性能目标(例如,在消息吞吐量方面)。没有明确的目标,性能调整可能会变成无休止的工作,而相对的改进却会减少。
  • 开发一个模拟您的真实数据集和应用程序环境的基准。
  • 使用不同的配置设置小心地运行基准测试并记录结果。在此步骤中,我强烈建议对您的应用程序进行性能分析,以识别瓶颈。瓶颈将阐明您应该在哪些方面进行调整。

Internet上没有人能够为您提供最佳价值。工作中有太多变量。

最后,您没有列出的一个选择是对生产者施加流控制,以限制他们可以发送的消息量,以便使用者跟上来,并且您不会收到很多过期的消息。大多数现代消息代理提供流程控制以压制生产者,以免他们不知所措。