java - Spring AMQP : Unable to set MessageProperties using RabbitMessagingTemplate

标签 java spring rabbitmq spring-amqp

我尝试过设置消息的过期时间并使用 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,而是使用 RabbitTemplateMessagePostProcessor;这样会更有效率一点...

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/

相关文章:

java - Eclipse,不会导入图像?

java - 在 ResourceSupports 中包含链接实体的片段

java - 需要有关 jython 、 django 和 java 混淆的帮助

java - Tomcat多个数据源与解密密码逻辑

java - 由于 SocketException,RabbitMQ 新连接被拒绝

RabbitMQ 交换绑定(bind)参数

java - Spring 中的异常处理程序

java - 在带有泛型参数的泛型方法中使用 Spring RestTemplate

java - 警告 : org. springframework.web.servlet.PageNotFound - 不支持请求方法 'GET'

file - 从一个文件向RabbitMQ发布多条消息