我正在将spring-boot与RabbitMQ结合使用,并且想知道是否可以使用RabbitTemplate对每个消息TTL使用。到目前为止,我有:

@Autowired
   private RabbitTemplate rabbit;

   public void produce() {

      rabbit.convertAndSend("My.Queue", routingKey, message);
   }

最佳答案

您可以创建MessagePostProcessor并在rabbitTemplate中使用它:

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


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

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

09-11 06:17