如何在spring boot中使用延迟时间rabbitmq实现公共消息

Rua*_*Tre 4 java rabbitmq 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);
}
Run Code Online (Sandbox Code Playgroud)

"应答后"按钮应仅用于问题的完整答案.

Art*_*lan 7

通过适当的答案查看类似的问题.

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);
}
Run Code Online (Sandbox Code Playgroud)

另一方面,我们在Spring AMQP 1.6中引入了Delayed Exchange:https://spring.io/blog/2016/02/16/spring-amqp-1-6-0-milestone-1-and-1-5 -4-可用.

UPDATE

Binding应被声明为:

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

要与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;
        }
    });
Run Code Online (Sandbox Code Playgroud)

  • 好的。那太棒了!希望看到我的回答被接受。否则所有这些讨论在这里都没有意义。 (3认同)