Spring 计划在将来发送的消息会立即发送(JBoss/HornetQ)

Spring 计划在将来发送的消息会立即发送(JBoss/HornetQ),spring,jboss,jms,hornetq,Spring,Jboss,Jms,Hornetq,JBoss EAP 6.2和内置HornetQ(2.3.12.最终版本) \u HQ\u SCHED\u DELIVERY,该属性指示在发送消息之前在消息上设置传递延迟,但侦听器会立即拾取消息。发送者和接收者都在同一台机器上(事实上,在同一个应用程序中),因此时钟差异不能对此负责 jmsTemplate.send(myQueue, new MessageCreator() { @Override public Message createMessage(javax.jms.Ses

JBoss EAP 6.2和内置HornetQ(2.3.12.最终版本)

\u HQ\u SCHED\u DELIVERY,该属性指示在发送消息之前在消息上设置传递延迟,但侦听器会立即拾取消息。发送者和接收者都在同一台机器上(事实上,在同一个应用程序中),因此时钟差异不能对此负责

jmsTemplate.send(myQueue, new MessageCreator() {
    @Override
    public Message createMessage(javax.jms.Session session) throws JMSException {
        MyMessageClass myMessageObject = new MyMessageClass(); //attributes omitted
        Message message = session.createObjectMessage(myMessageObject);
        message.setLongProperty("_HQ_SCHED_DELIVERY", 60000); //should delay a minute
        return message;
    }
});

属性的名称和类型是正确的,根据您的错误判断。这是交货时间,不是延误

您应该将System.currentTimeMillis()设置为+60000,以便正确使用

正确的用法是:

message.setLongProperty("_HQ_SCHED_DELIVERY", 
    System.currentTimeMillis() + 60000); //should delay a minute

从官方资源::

指定的值必须是与必须传递消息的时间(以毫秒为单位)相对应的正长度

所以,是的;您可以将其设置为毫秒表示,以表示何时应该传递。所以一个延迟将是当前时间加上延迟,或者是一个特定的时间,只需为该时间创建一个日期对象并通过该时间触发即可