[英]Delaying messages in ActiveMQ
我想延迟向我的 JMS 客户端发送消息。 我正在使用 AMQ 5.8.0。 在文档中,它声明将配置设置schedulerSupport
设置为true
(默认情况下为false
)
<broker xmlns="http://activemq.apache.org/schema/core"
persistent="false"
dedicatedTaskRunner="false"
schedulerSupport="true"
brokerName="mybroker">
这是我用于生成/使用我的记录的测试代码
TextMessage sendMessage = producerSession.createTextMessage();
sendMessage.setStringProperty(Constants.PARAM_ID, newUniqueId);
long delay = 20 * 1000;
sendMessage.setLongProperty(ScheduledMessage.AMQ_SCHEDULED_DELAY, delay); //sets delay
sendMessage.setJMSCorrelationID(newUniqueId);
producer.send(sendMessage);
Message m = consumer.receive(); //get message. This should be null
if(m != null)
{
id = m.getStringProperty(Constants.PARAM_ID); //I get the message well before 20 sec delay
}
我可以在计划选项卡下的码头浏览器中查看我的记录。 该消息应延迟 20 秒。 但是,当调用consumer.receive()
时,我在 20 延迟到期之前就得到了记录。
我是否误解了这种延迟是如何工作的? 我不希望记录在一段时间内可用。
您必须使用ScheduledMessage.AMQ_SCHEDULED_DELAY
属性,即
sendMessage.setLongProperty(ScheduledMessage.AMQ_SCHEDULED_DELAY, delay);
并启用持久性(默认情况下 = true,如果未设置):
<broker persistent="true">
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.