繁体   English   中英

在 ActiveMQ 中延迟消息

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM