2017-08-31 1887 views

回答

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

尽管在其他的方式解决问题的,你的是更干净。谢谢@ByeBye – Khodabakhsh

1

只是有一点点的解决方法:

@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); 
    } 
相关问题