我尝试过设置消息的过期时间并使用 RabbitMessagingTemplate 转换和发送它:
Map<String,Object> headers = new HashMap<>();
headers.put("expiration", "20000");
rabbitMessagingTemplate.convertAndSend(exchange.getName(),routingKey, event, headers);
但它不起作用,因为过期应设置为属性而不是 header 。不幸的是,RabbitMessagingTemplate 不提供传递消息属性而仅传递 header 的方法。另一方面,我需要转换消息,因为我使用 JecksonMessageConverter。 如何在使用 RabbitMessagingTemplate 发送消息之前添加消息属性?
最佳答案
将 MessagePostProcessor 添加到基础 RabbitRemplate 的 beforePublishPostProcessors。
我现在无法查看代码,但令我惊讶的是它没有映射。
编辑
使用 header 名称amqp_expiration
。请参阅AmqpHeaders.EXPIRATION。它映射到消息属性。
无法识别的 header 被映射到 header 。
编辑2
无论如何,考虑到您的要求,您最好不要使用 RabbitMessagingTemplate
,而是使用 RabbitTemplate
和 MessagePostProcessor
;这样会更有效率一点...
rabbitTemplate.convertAndSend(exchange.getName(), routingKey, event, m -> {
m.getMessageProperties().setExpiration(...);
...
return m;
};
关于java - Spring AMQP : Unable to set MessageProperties using RabbitMessagingTemplate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44471616/