Java 在ActiveMQ中延迟消息

Java 在ActiveMQ中延迟消息,java,activemq,Java,Activemq,我想延迟发送给JMS客户端的消息。 我正在使用AMQ5.8.0。在文档中,它声明将配置设置schedulerSupport设置为true(默认为false) 这是我制作/使用记录的测试代码 TextMessage sendMessage = producerSession.createTextMessage(); sendMessage.setStringProperty(Constants.PARAM_ID, newUniqueId); long delay = 20 * 1000; se

我想延迟发送给JMS客户端的消息。 我正在使用AMQ5.8.0。在文档中,它声明将配置设置
schedulerSupport
设置为
true
(默认为
false


这是我制作/使用记录的测试代码

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
}
我可以在jetty浏览器的“计划”选项卡下查看我的记录。消息应延迟20秒。但是,当发出
consumer.receive()
调用时,我会在20次延迟到期之前获得记录


我是不是误解了这种拖延是怎么回事?我不希望记录在一段时间内可用。

您必须使用
ScheduledMessage.AMQ\u SCHEDULED\u DELAY
属性,即

sendMessage.setLongProperty(ScheduledMessage.AMQ_SCHEDULED_DELAY, delay);
以及启用持久性(如果未设置,则默认为true):



Yes。。我一定是在发邮件的时候砍了一些。但这就是我使用的财产。它也按计划显示在amq jetty web浏览器中。。所以我不知道为什么我要马上把它拿回来。。它应该越来越大了delayed@DanielCosiopersistent=“false”应更改为persistent=“true”(这是默认设置),否则消息将不会延迟。谢谢。。这就是我们所缺少的。它只适用于持久性队列。我相信在最新的代理版本中,如果将persistent设置为false,内存中的调度程序将被激活。按照状态,调用
javax.jms.MessageConsumer.receive()
“将无限期阻塞,直到生成消息或关闭此消息使用者。”但是,您的评论说,“这应该是null”,这是不正确的。只有同时关闭
消息消费者
时,它才会返回
null
<broker persistent="true">