我的情况。我有完整的交付时间队列容器元素。 我在春季启动时使用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);
}
“应答后”按钮仅用于问题的完整答案。
答案 0 :(得分:7)
通过适当的答案查看类似的问题。
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中引入了Delayed Exchange: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;
}
});