使用 Spring AMQP 延迟消息发送到侦听器

Aks*_*hat 3 rabbitmq spring-rabbit spring-amqp

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

例如。生产者产生消息,消息进入 RabbitMQ Q ,消息被接收 Listener 立即收听 Q,我想延迟消息在消费者端接收,比如在一些配置参数后说 1000ms

Art*_*lan 6

RabbitMQ 为此提供了延迟交换功能。

从 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" />
Run Code Online (Sandbox Code Playgroud)
MessageProperties properties = new MessageProperties();
properties.setDelay(15000);
template.send(exchange, routingKey,
        MessageBuilder.withBody("foo".getBytes()).andProperties(properties).build());
Run Code Online (Sandbox Code Playgroud)

更新

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

另请参阅此问题及其答案:Spring AMQP RabbitMq 中的调度/延迟消息传递

  • 问题是什么?我说:从1.6开始。您能解释坚持使用如此旧的 EOL 版本的原因吗? (2认同)