如何使用 RabbitTemplate 设置每条消息的 TTL?

Kho*_*hsh 1 java spring rabbitmq spring-boot

我正在将 spring-boot 与 rabbitMQ 一起使用,我想知道是否可以使用 RabbitTemplate 使用每条消息 TTL。到目前为止我有:

@Autowired
   private RabbitTemplate rabbit;

   public void produce() {

      rabbit.convertAndSend("My.Queue", routingKey, message);
   }
Run Code Online (Sandbox Code Playgroud)

Bye*_*Bye 7

你可以MessagePostProcessor在你里面创建和使用它rabbitTemplate

final String message = "message";
final MessagePostProcessor messagePostProcessor = new MyMessagePostProcessor(10000);
rabbitTemplate.convertAndSend("my.queue", "routingKey", message, messagePostProcessor);
Run Code Online (Sandbox Code Playgroud)

这将捕获您的消息,应用更改并进一步发送。

public class MyMessagePostProcessor implements MessagePostProcessor {

    private final Integer ttl;

    public MyMessagePostProcessor(final Integer ttl) {
        this.ttl = ttl;
    }

    @Override
    public Message postProcessMessage(final Message message) throws AmqpException {
        message.getMessageProperties().getHeaders().put("expiration", ttl.toString());
        return message;
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 这个方法没有奏效。如果我将其更改为 `message.getMessageProperties().setExpiration(ttl.toString());` 来自 @Zhecker 的回答,它就会起作用 (2认同)