Spring boot spring引导中activeMQ中消息的延迟传递

Spring boot spring引导中activeMQ中消息的延迟传递,spring-boot,activemq,Spring Boot,Activemq,我想在任何时间“t”发送一条消息,该消息将在“x”秒后由接收方接收 为此,我编写了发送者代码 @Autowired private JmsTemplate jmsTemplate; private Queue queue = new ActiveMQQueue("topicName"); public void show(String message) { try { System.out.println("Sending message " + message);

我想在任何时间“t”发送一条消息,该消息将在“x”秒后由接收方接收

为此,我编写了发送者代码

@Autowired
private JmsTemplate jmsTemplate;
private Queue queue = new ActiveMQQueue("topicName");

public void show(String message) {
    try {
        System.out.println("Sending message " + message);
        jmsTemplate.convertAndSend(queue, message, new MessagePostProcessor() {
            @Override
            public Message postProcessMessage(Message message) throws JMSException {
                System.out.println("postProcessMessage executed ");
                message.setLongProperty(ScheduledMessage.AMQ_SCHEDULED_DELAY, 3 * 60 * 1000);
                System.out.println("long time " + message
                        .getLongProperty(ScheduledMessage.AMQ_SCHEDULED_DELAY));
                return message;
            }
        });
        System.out.println("Sending done " + message + " at " + System.currentTimeMillis());
    } catch (Exception er) {
        er.printStackTrace();
    }
}
和接收代码

@JmsListener(destination = "topicName")
    public void reciever(String message) {
        System.out.println("receiving message " + message + " at " + System.currentTimeMillis());
    }
但接收方收到的信息是即时的,没有任何延迟

输出为

发送消息这是一条长时间执行的消息
后处理消息 时间180000
收到消息这是1514391984964的消息
发送完毕,请致电1514391984970

配置文件是

@Bean
    JmsTemplate createJMSTemplate(ConnectionFactory connectionFactory) {
        JmsTemplate jmsTemplate = new JmsTemplate();
        jmsTemplate.setConnectionFactory(connectionFactory);
        return jmsTemplate;
    }

    @Bean
    ConnectionFactory myActiveMQConnectionFactory() {
        RedeliveryPolicy redeliveryPolicy = new RedeliveryPolicy();
        redeliveryPolicy.setBackOffMultiplier(1);
        redeliveryPolicy.setUseExponentialBackOff(false);
        ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://localhost:61616");
        connectionFactory.setRedeliveryPolicy(redeliveryPolicy);
        NetworkConnector networkConnector = new DiscoveryNetworkConnector();
        networkConnector.setConsumerTTL(2);

        return connectionFactory;
    }

默认配置的activemq不支持延迟消息,您应该首先将其打开

在activemq.conf中添加schedulerSupport

<broker xmlns="http://activemq.apache.org/schema/core" brokerName="localhost" dataDirectory="${activemq.data}" schedulerSupport="true">

您是否在代理中启用了计划支持?