Spring JMS DefaultMessageListenerContainer轮询频率
我使用DefaultMessageListenerContainer来消费ActiveMQ队列中的消息,如下所示。在这个实现中,是否有任何轮询机制,侦听器是否每隔1秒左右轮询队列以查看是否有新消息,或者每当队列中有新消息时是否调用onMessage方法?如果使用轮询,我们如何增加或减少轮询频率(时间)Spring JMS DefaultMessageListenerContainer轮询频率,jms,activemq,spring-jms,polling,message-listener,Jms,Activemq,Spring Jms,Polling,Message Listener,我使用DefaultMessageListenerContainer来消费ActiveMQ队列中的消息,如下所示。在这个实现中,是否有任何轮询机制,侦听器是否每隔1秒左右轮询队列以查看是否有新消息,或者每当队列中有新消息时是否调用onMessage方法?如果使用轮询,我们如何增加或减少轮询频率(时间) 容器轮询JMS客户机,但代理将消息推送到客户机 因此,不,容器不会直接轮询队列 如果队列中没有消息,容器将在receiveTimeout之后超时,并立即重新轮询,并在代理发送下一条消息后立即获取该
容器轮询JMS客户机,但代理将消息推送到客户机 因此,不,容器不会直接轮询队列 如果队列中没有消息,容器将在
receiveTimeout
之后超时,并立即重新轮询,并在代理发送下一条消息后立即获取该消息
预回迁确定代理发送给消费者的消息数量;因此,这可能会影响性能(但我认为,最新的ActiveMQ版本默认为1000)
将预回迁设置为1将提供最慢的传递速率
如果您想放慢速度,可以在侦听器中添加
线程.sleep()
。谢谢。你能给我指一下这方面的文件吗。我找不到太多的细节。我看到你是新来的-看-看和以及代码本身(毕竟是开源的)。我是新来的。请澄清。如上所述,对MessageListener使用异步接收时,recievTimeOut不适用。21.4.1同步接收。。可以同步使用消息。在同步接收期间,调用线程块直到消息可用。这可能是一个危险的操作,因为调用线程可能被无限期阻塞。属性receiveTimeout指定接收方在放弃等待消息之前应等待多长时间。请不要使用3.0.x文档;目前的spring版本是5.3.x3.0.x,多年来一直不受支持。对于异步,容器的receiveTimeout
对传递速率几乎没有影响,当接收超时时,容器立即尝试另一个接收。在启用调试日志记录时,增加receiveTimeout
可能有助于减少日志记录量。过多地增加它也会使容器对stop()
调用的响应变差,因为在接收超时之前,stop不会生效。
DefaultMessageListenerContainer container = new DefaultMessageListenerContainer();
container.setMessageListener(new MessageJmsListener ());
public class MessageJmsListener implements MessageListener {
@Override
public void onMessage(Message message) {
if (message instanceof TextMessage) {
try {
//process the message and create record in Data Base
} catch (Exception e) {
throw new RuntimeException(e);
}
}
}
}