rabbitmq - 使用 Spring AMQP 延迟消息发送到监听器

标签 rabbitmq spring-amqp spring-rabbit

我需要在一定时间后向 MessageListener 发送消息,那么有什么方法可以使用 Spring AMQP 来实现。

例如。 生产者产生消息并将消息发送到 RabbitMQ Q ,消息被接收到监听器立即监听该 Q,我想延迟该消息在消费者端接收,比如在一些配置参数说 1000 毫秒后

最佳答案

RabbitMQ 为此提供了 Delayed Exchange功能。

从 1.6 版开始,Spring AMQP 还提供了一个高级 API:http://docs.spring.io/spring-amqp/reference/html/_reference.html#delayed-message-exchange :

<rabbit:topic-exchange name="topic" delayed="true" />

MessageProperties properties = new MessageProperties();
properties.setDelay(15000);
template.send(exchange, routingKey,
        MessageBuilder.withBody("foo".getBytes()).andProperties(properties).build());

更新

在 Spring AMQP 1.6 之前你应该这样做:

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

...

MessageProperties properties = new MessageProperties();
properties.setHeader("x-delay", 15000);
template.send(exchange, routingKey,
        MessageBuilder.withBody("foo".getBytes()).andProperties(properties).build());

另请参阅此问题及其答案:Scheduled/Delay messaging in Spring AMQP RabbitMq

关于rabbitmq - 使用 Spring AMQP 延迟消息发送到监听器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40634830/

相关文章:

spring-boot - 创建后立即删除RabbitMQ队列。为什么?

python - Celery 动态队列创建和路由

timestamp - RabbitMQ 3.1.3 和丢失的时间戳头

spring-integration - 发布者从出站适配器确认后如何将 basicAck 发送到入站适配器

java - 在 Spring 应用程序关闭时发送 RabbitMQ 消息

spring-boot - 如何在 Spring Boot 中使用 @Lazy 延迟加载 RabbitMQ 队列?

spring - 如何在 Spring AMQP 中使用响应式(Reactive) RabbitListener Ack/Nack?

networking - 如何将在 boot2docker 中运行的 Docker 容器连接到在另一台主机上运行的网络服务?

RabbitMQ 上的 Spring 集成和 AMQP 抛出异常 Method handleToken(byte[]) 找不到

java - 如何使用 RabbitMQ 和 Spring boot 向电子邮件地址列表发送批量电子邮件?