rabbitmq 如何在 Spring 开机时实现带延时的短信群发

b4qexyjb  于 2022-11-08  发布在  RabbitMQ
关注(0)|答案(1)|浏览(121)

我的情况。我有队列容器元素与确切的时间交付。我用rabbitmq实现的 Spring 启动支持。现在我应该发送消息到队列和延迟时间后队列将交付消息。Rabbitmq支持rabbitmq-延迟-消息-交换插件来调度消息。但我不实现。什么错误在我的代码。(我启用插件延迟)

@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);
}

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

mo49yndu

mo49yndu1#

请看类似问题的适当答案。
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中的延迟交换:是的。

更新

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;
        }
    });

相关问题