Spring AMQP:无法使用RabbitMessagingTemplate

时间:2017-06-10 09:16:25

标签: java spring rabbitmq spring-amqp

我试过这个来设置一条消息的过期时间,并使用RabbitMessagingTemplate转换和发送它:

Map<String,Object> headers = new HashMap<>();
headers.put("expiration", "20000");
rabbitMessagingTemplate.convertAndSend(exchange.getName(),routingKey, event, headers);

但它不起作用,因为到期应设置为属性而不是标题。遗憾的是,RabbitMessagingTemplate没有提供传递邮件属性的方法,只提供了标头。另一方面,我需要转换消息,因为我使用JecksonMessageConverter。 如何在使用RabbitMessagingTemplate发送消息之前添加消息属性?

1 个答案:

答案 0 :(得分:2)

将MessagePostProcessor添加到基础RabbitRemplate的beforePublishPostProcessors。

我现在无法查看代码,但我很惊讶它没有映射。

修改

使用标题名称amqp_expiration。见AmqpHeaders.EXPIRATION。它映射到消息属性。

无法识别的标头会映射到标头。

<强> EDIT2

在任何情况下,根据您的要求,您最好不要使用RabbitMessagingTemplate,而是使用RabbitTemplateMessagePostProcessor代替;它会更有效率......

rabbitTemplate.convertAndSend(exchange.getName(), routingKey, event, m -> {
    m.getMessageProperties().setExpiration(...);
    ...
    return m;
};