【问题标题】:How to public message with delay time rabbitmq implement in spring boot如何在spring boot中实现延迟时间rabbitmq公开消息
【发布时间】:2016-06-06 04:03:06
【问题描述】:

我的情况。我有准确的交付时间的队列容器元素。 我使用spring boot的rabbitmq工具来支持。现在我应该将消息发送到队列,延迟时间后队列将传递消息。 Rabbitmq 支持 rabbitmq-delayed-message-exchange 插件来安排消息。但我没有实施。我的代码有什么问题。 (我启用了插件延迟)

@Bean
DirectExchange directExchange() {
    Map<String, Object> args = new HashMap<String, Object>();
    args.put("x-delayed-type", "x-delayed-message");
    return new DirectExchange("my-exchange", true, false, args);
}

@Bean
Binding binding(Queue queue, DirectExchange directExchange) {
    return BindingBuilder.bind(queue).to(directExchange).with(queueName);
}

“发布答案”按钮应仅用于问题的完整答案。

【问题讨论】:

    标签: java spring-boot rabbitmq


    【解决方案1】:

    查看类似问题的适当答案。

    Scheduled/Delay messaging in Spring AMQP RabbitMq

    你的问题在这里:

    @Bean
    CustomExchange delayExchange() {
        Map<String, Object> args = new HashMap<String, Object>();
        args.put("x-delayed-type", "direct");
        return new CustomExchange("my-exchange", "x-delayed-message", true, false, args);
    }
    

    另一方面,我们在 Spring AMQP 1.6 中引入了延迟交换:https://spring.io/blog/2016/02/16/spring-amqp-1-6-0-milestone-1-and-1-5-4-available

    更新

    Binding 应声明为:

    @Bean
    Binding binding(Queue queue, Exchange delayExchange) {
        return BindingBuilder.bind(queue).to(delayExchange).with("foo").noargs();
    }
    

    要使用delay 发送消息,您应该执行几乎相同的操作:

    rabbitTemplate.convertAndSend("my-exchange", "spring-boot", new DaoDoa(), new MessagePostProcessor() {
            @Override
            public Message postProcessMessage(Message message) throws AmqpException {
                message.getMessageProperties().setHeader("x-delay, 15000);
                return message;
            }
        });
    

    【讨论】:

    • 没关系。谢谢大师。我在最后一天通过了它,你的解决方案就像我一样:D。
    • 好的。那太棒了!希望看到我的回答被接受。否则所有这些讨论在这里都没有意义。
    • 现在您可以通过以下方式添加标题:message.getMessageProperties().setDelay(15000)
    最近更新 更多