当前位置: 首页 > 知识库问答 >
问题:

spring boot中JMS使用者的动态伸缩

凌远
2023-03-14

它们是我可以在sprint-boot应用程序上动态地向上和向下缩放消费者的一种方式吗?

共有1个答案

韩麒
2023-03-14

您所说的使用者是DefaultMessageListenerContainer的不同线程还是DefaultMessageListenerContainer的不同实例?

您可以通过更改DefaultMessageListenerContainer的线程数来动态增加和减少

org.springframework.jms.listener.DefaultMessageListenerContainer.concurrentConsumers

而且

org.springframework.jms.listener.defaultmessageListenerContainer.maxConcurrentConsumers相应地

更新

如果使用多个使用者和/或线程,则需要调整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添加到activeMQ.xml中的uri配置中,或者在客户端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

而且

 类似资料:
  • 我试图将WSO2配置为使用来自ActiveMQ的消息,并在处理过程中引发错误时requeue(通常是当对远程web服务的调用失败时)。 Activemq在Axis2.xml中配置,属性transport.jms.SessionTransact设置为true。 当远程URL的格式无效(例如使用错误的协议)时,JMS回滚/重新传递/[重定向到死信]特性可以正常工作。但是,如果我停止远程web服务器,或

  • 我正在使用Spring靴和活动MQ设置一个持久的JMS主题使用者。我能够使用Spring靴@JmsListener注释来使一切正常工作(作为耐用消费者成功运行)。但是,因为我想动态创建侦听器,所以我尝试使用 JmsListener 配置接口来创建它们。 使用主题“消费者”下面的代码可以成功地创建和使用消息。但是,问题是它创造的消费者并不持久。我在工厂中将clientId、setSubscripti

  • 我试图以一种可伸缩的方式将Spring JMS消息与@JMSListener一起使用,但我没有看到它发生。我有一个ConnectionFactory bean,它返回通过JMS和数据库数据源池连接到Oracle高级队列的工厂。 当每个@JMSListener接收器再次连接到JMS(从而连接到数据库池)时,问题就开始了。我的理解是,我可以有许多@JMSListener方法,每个服务一个,但这样做我是

  • 问题内容: 我有一个带有HornetQ的JBoss-6服务器和一个队列: 有一个不同的消费者(在不同的机器)连接到这个队列中,但只有一个 单一的 消费者是活动的时间。如果我关闭此使用者,则消息将立即由其他使用者之一处理。 由于我的消息需要一些耗时的处理,因此我希望多个使用者同时处理其唯一消息。 我记得在早期版本的JBoss中也有类似的情况,该设置可以正常工作。在Jboss-6中,消息传递系统运行良

  • 我可以看到请求消息被加入和出列,响应消息被加入和出列。但我有个例外, 我应该如何检索响应?

  • JMS队列有2个消费者,同步和异步Java应用程序进程等待响应。1)同步应用程序发送请求,并根据JMS相关ID等待响应60秒。2)异步线程将不断侦听同一队列。