jms容器并发性的最佳值

jms容器并发性的最佳值,jms,messaging,spring-jms,Jms,Messaging,Spring Jms,因此,我定义了jms连接工厂,将并发设置为10,我的使用者一次可以并发地使用10条消息。现在的问题是,生产者对消息的排队速度快于消费者的消费速度,这导致我的一半消息在队列中过期 我可以增加消息TTL,使它们在队列中保持更长的时间而不会过期。 增加并发使用者的并发值。 我面临的问题是: 我不知道增加并发值将如何影响系统? 我能把它的价值提高到什么程度?这个概念是否类似于线程池中的线程数? 我认为达到最佳值的唯一方法是: 建立明确的性能目标,例如在消息吞吐量方面。如果没有明确的目标,性能调优可能会变

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

我可以增加消息TTL,使它们在队列中保持更长的时间而不会过期。 增加并发使用者的并发值。 我面临的问题是:

我不知道增加并发值将如何影响系统? 我能把它的价值提高到什么程度?这个概念是否类似于线程池中的线程数?
我认为达到最佳值的唯一方法是:

建立明确的性能目标,例如在消息吞吐量方面。如果没有明确的目标,性能调优可能会变成一个无休止的练习,相对改进会越来越少。 开发模拟真实世界数据集和应用程序环境的基准测试。 小心地使用不同的配置设置运行基准测试,并记录结果。在这一步中,我强烈建议对您的应用程序进行评测,以便识别瓶颈。瓶颈将明确您应该将调优工作集中在哪里。 互联网上没有人能给你一个最优值。变量太多了


最后,您没有列出的一个选项是对您的制作人施加流量控制,以限制他们可以发送的消息量,这样消费者就可以跟上,您就不会收到很多过期消息。大多数现代的消息代理都提供流控制来回击生产者,这样他们就不会压倒生产者。

问题是我的服务是独立的消费者,它无法真正控制生产者的行为。我真正想要的是,如果有一个数字可以根据我拥有的CPU资源数量开始,或者我必须从一个数字开始,并不断增加它,直到性能不断提高?您首先需要找出瓶颈是什么。分析你的应用程序。瓶颈是我的服务在不规则的时间间隔内收到大量消息,这让我的消费者忙了一段时间,因此消息在队列中过期。我的直觉是,仅仅接收消息的基本行为不是真正的问题,而是消费者实际正在做的工作,这需要足够的时间使消息过期。您的消费代码可以做任何事情,这就是为什么没有人可以为您提供最佳并发数的原因之一。我建议您按照我的回答中概述的步骤进行操作。此外,我在回答中讨论的流量控制并不是消费者为了控制生产商而对生产商强制执行的。这是经纪人强加给制片人的。我的回答回答了你的问题吗?如果是,请将其标记为正确,以帮助将来可能有相同问题的其他人。如果没有,请详细说明原因。谢谢我在寻找一些数字,应该有价值的开始和最大值,我可以去基于系统资源的权利?或者这只能通过重复的性能运行来发现?如果您正在寻找问题所表明的最佳值,那么您只能通过性能测试来获得这些值,正如我的答案所概述的。
<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>