【问题标题】:How to set per message TTL with RabbitTemplate?如何使用 RabbitTemplate 设置每条消息的 TTL?
【发布时间】:2017-08-31 16:58:22
【问题描述】:

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

@Autowired
   private RabbitTemplate rabbit;

   public void produce() {

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

【问题讨论】:

    标签: java spring spring-boot rabbitmq


    【解决方案1】:

    您可以创建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;
        }
    }
    

    【讨论】:

    • 此方法无效。如果我将其更改为message.getMessageProperties().setExpiration(ttl.toString());,它将起作用来自@Zhecker的回答
    【解决方案2】:

    只是有一点解决方法:

    @Autowired
       private RabbitTemplate   rabbit;
    
       @Autowired
       private MessageConverter jsonMessageConverter;
    
       public void produce() {
    
          rabbit.setExchange("My.Exchange");
          rabbit.setRoutingKey("R.K");
          rabbit.setMessageConverter(jsonMessageConverter);
          MessageProperties props = new MessageProperties();
          props.setExpiration(Long.toString(expiration));
          Message toSend = new Message(message.toString().getBytes(), props);
          rabbit.send(toSend);
       }
    

    【讨论】:

      【解决方案3】:

      如果您要使用MessagePostProcessor 解决方案,您应该向您的消息添加属性而不是标题。

      message.getMessageProperties().setExpiration(ttl.toString());
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-02-02
        • 2016-05-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-12-07
        • 2016-10-24
        • 1970-01-01
        相关资源
        最近更新 更多