我正尝试构建一个从activeMQ生产者读取数据的spring-boot应用程序。我希望客户的资源能够最佳化。在我的spring-boot应用程序中,我想配置多个使用者,并且所有这些使用者都将连接到一个队列。JMS消费者在春季启动时的动态缩放
是他们的一种方式,我可以在sprint-boot应用程序中动态扩展和缩减消费者吗?
我正尝试构建一个从activeMQ生产者读取数据的spring-boot应用程序。我希望客户的资源能够最佳化。在我的spring-boot应用程序中,我想配置多个使用者,并且所有这些使用者都将连接到一个队列。JMS消费者在春季启动时的动态缩放
是他们的一种方式,我可以在sprint-boot应用程序中动态扩展和缩减消费者吗?
您所说的消费者,是不同线程的DefaultMessageListenerContainer
或DefaultMessageListenerContainer
的不同实例?
可以增加和动态减少通过改变
org.springframework.jms.listener.DefaultMessageListenerContainer.concurrentConsumers
和
org.springframework.jms.listener.DefaultMessageListenerContainer.maxConcurrentConsumers
线程使用DefaultMessageListenerContainer的数量相应
UPDATE
,如果你有多个消费者的工作和/或者是您需要修改prefetchPolicy。
persistent queues (default value: 1000)
non-persistent queues (default value: 1000)
persistent topics (default value: 100)
non-persistent topics (default value: Short.MAX_VALUE - 1)
所有消息被派往第一所连接的消费者,当另外一个连接,他没有收到邮件,因此,如果你有需要prefetchPolicy设定的较低值的队列同时消费者改变这种行为比默认值。例如,这jms.prefetchPolicy.queuePrefetch=1
添加到URI配置在activemq.xml中或将其设置在客户端的URL等推荐用于高 消息量高性能的这个
ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://172.16.143.99:61616?jms.prefetchPolicy.queuePrefetch=1");
预取大值。但是,对于消息量较小的消息,每个消息需要很长时间才能处理,预取应设置为1. 这确保消费者一次只处理一条消息。 但是,指定预取限制为零将导致消费者 轮询一次一个消息,而不是将消息推送给使用者,该消息是 。
看看http://activemq.apache.org/what-is-the-prefetch-limit-for.html
而且
我有同样的应用程序的多个实例,我打算创建多个消费者在每个instance.Is它一个最佳的解决方案? –
DMLC的同一个实例中的多个线程正常,但为什么DMLC(消费者)和应用程序的多个实例要从单个队列中消耗? –
维护这些实例的故障安全。如果配置了DMLC的实例发生故障,则消息处理将停止。 –