我试过这个来设置一条消息的过期时间,并使用RabbitMessagingTemplate转换和发送它:
Map<String,Object> headers = new HashMap<>();
headers.put("expiration", "20000");
rabbitMessagingTemplate.convertAndSend(exchange.getName(),routingKey, event, headers);
但它不起作用,因为到期应设置为属性而不是标题。遗憾的是,RabbitMessagingTemplate
没有提供传递邮件属性的方法,只提供了标头。另一方面,我需要转换消息,因为我使用JecksonMessageConverter。
如何在使用RabbitMessagingTemplate发送消息之前添加消息属性?
答案 0 :(得分:2)
将MessagePostProcessor添加到基础RabbitRemplate的beforePublishPostProcessors。
我现在无法查看代码,但我很惊讶它没有映射。
修改强>
使用标题名称amqp_expiration
。见AmqpHeaders.EXPIRATION
。它映射到消息属性。
无法识别的标头会映射到标头。
<强> EDIT2 强>
在任何情况下,根据您的要求,您最好不要使用RabbitMessagingTemplate
,而是使用RabbitTemplate
和MessagePostProcessor
代替;它会更有效率......
rabbitTemplate.convertAndSend(exchange.getName(), routingKey, event, m -> {
m.getMessageProperties().setExpiration(...);
...
return m;
};