jms容器最佳并发值
Optimal value of concurrency for jms container
<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>
所以,我定义了并发设置为 10 的 jms 连接工厂,我的消费者可以一次并发使用 10 条消息。现在,问题是生产者排队消息的速度快于消费者可以消费的速度,结果我一半的消息在队列中过期了。
- 我可以增加消息 TTL,以便它们在队列中停留更长时间而不会过期。
- 增加并发消费者的并发值。
我面临的问题是:
- 不知道提高并发值对系统有什么影响?
- 我可以将它的值增加到什么值?这个概念是不是类似于线程池中的no.of个线程?
我认为您要达到最佳值的唯一方法是:
- 建立明确的性能目标(例如在消息吞吐量方面)。如果没有明确的目标,性能调整可能会变成无休止的练习,相对改进会逐渐减少。
- 开发模拟您的 real-world data-set 和应用程序环境的基准。
- 仔细 运行 使用不同配置设置的基准测试并记录结果。在此步骤中,我强烈建议分析您的应用程序以确定瓶颈。瓶颈将阐明您应该将调整工作的重点放在哪里。
Internet 上没有人能够只为您提供最佳价值。工作中变数太多。
最后,您没有列出的一个选项是对您的生产者施加 flow-control 限制他们可以发送的消息数量,以便消费者跟上并且您不会收到很多过期消息.大多数现代消息代理提供 flow-control 来反击生产者,这样他们就不会压倒他们。
<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>
所以,我定义了并发设置为 10 的 jms 连接工厂,我的消费者可以一次并发使用 10 条消息。现在,问题是生产者排队消息的速度快于消费者可以消费的速度,结果我一半的消息在队列中过期了。
- 我可以增加消息 TTL,以便它们在队列中停留更长时间而不会过期。
- 增加并发消费者的并发值。
我面临的问题是:
- 不知道提高并发值对系统有什么影响?
- 我可以将它的值增加到什么值?这个概念是不是类似于线程池中的no.of个线程?
我认为您要达到最佳值的唯一方法是:
- 建立明确的性能目标(例如在消息吞吐量方面)。如果没有明确的目标,性能调整可能会变成无休止的练习,相对改进会逐渐减少。
- 开发模拟您的 real-world data-set 和应用程序环境的基准。
- 仔细 运行 使用不同配置设置的基准测试并记录结果。在此步骤中,我强烈建议分析您的应用程序以确定瓶颈。瓶颈将阐明您应该将调整工作的重点放在哪里。
Internet 上没有人能够只为您提供最佳价值。工作中变数太多。
最后,您没有列出的一个选项是对您的生产者施加 flow-control 限制他们可以发送的消息数量,以便消费者跟上并且您不会收到很多过期消息.大多数现代消息代理提供 flow-control 来反击生产者,这样他们就不会压倒他们。