java - 如何在spring boot中实现带有延迟时间的rabbitmq公共(public)消息

标签 java spring-boot 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);
}

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

最佳答案

请参阅具有适当答案的类似问题。

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

关于java - 如何在spring boot中实现带有延迟时间的rabbitmq公共(public)消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35592427/

相关文章:

java - RabbitMQ - 安全/身份验证

java - RabbitMQ 生产者不会终止

java - 为什么两个同名的字符串有相同的对象实例?

java - 坐标 ArrayList 应该具有相同的大小

maven - 如何在另一个项目中向Spring Boot Jar添加依赖项?

java - spring amqp注解驱动一个队列两个监听器区分路由key

java - 如何打印出 JTable 的特定行/列?

java - 在圆形 JLabel 图像周围创建可点击区域

java - 在 Spring Batch 中重置内存数据库

spring - 使用 Spring Security 从 JWT token 中提取当前登录的用户信息