Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring JMS DefaultMessageListenerContainer轮询频率_Jms_Activemq_Spring Jms_Polling_Message Listener - Fatal编程技术网

Spring JMS DefaultMessageListenerContainer轮询频率

Spring JMS DefaultMessageListenerContainer轮询频率,jms,activemq,spring-jms,polling,message-listener,Jms,Activemq,Spring Jms,Polling,Message Listener,我使用DefaultMessageListenerContainer来消费ActiveMQ队列中的消息,如下所示。在这个实现中,是否有任何轮询机制,侦听器是否每隔1秒左右轮询队列以查看是否有新消息,或者每当队列中有新消息时是否调用onMessage方法?如果使用轮询,我们如何增加或减少轮询频率(时间) 容器轮询JMS客户机,但代理将消息推送到客户机 因此,不,容器不会直接轮询队列 如果队列中没有消息,容器将在receiveTimeout之后超时,并立即重新轮询,并在代理发送下一条消息后立即获取该

我使用DefaultMessageListenerContainer来消费ActiveMQ队列中的消息,如下所示。在这个实现中,是否有任何轮询机制,侦听器是否每隔1秒左右轮询队列以查看是否有新消息,或者每当队列中有新消息时是否调用onMessage方法?如果使用轮询,我们如何增加或减少轮询频率(时间)


容器轮询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);
            }
        }
    }     
}