Java Spring AMQP:无法使用RabbitMessagingTemplate设置MessageProperties

Java Spring AMQP:无法使用RabbitMessagingTemplate设置MessageProperties,java,spring,rabbitmq,spring-amqp,Java,Spring,Rabbitmq,Spring Amqp,我尝试过设置消息的过期时间,并使用RabbitMessagingTemplate转换和发送消息: Map<String,Object> headers = new HashMap<>(); headers.put("expiration", "20000"); rabbitMessagingTemplate.convertAndSend(exchange.getName(),routingKey, event, headers); Map headers=newhash

我尝试过设置消息的过期时间,并使用RabbitMessagingTemplate转换和发送消息:

Map<String,Object> headers = new HashMap<>();
headers.put("expiration", "20000");
rabbitMessagingTemplate.convertAndSend(exchange.getName(),routingKey, event, headers);
Map headers=newhashmap();
标题。看跌期权(“到期日”、“20000”);
rabbitMessagingTemplate.convertAndSend(exchange.getName(),routingKey,event,Header);
但它不起作用,因为过期应设置为属性,而不是标题。不幸的是,
RabbitMessagingTemplate
不提供传递消息属性的方法,而只提供消息头。另一方面,我需要转换消息,因为我使用JecksonMessageConverter。
如何在使用RabbitMessagingTemplate发送消息之前添加消息属性?

向基础RabbitRemplate的BeforePublishPostProcessor添加消息后处理器

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

编辑

使用标题名称
amqp\u expiration
。请参见
AmqpHeaders.EXPIRATION
。它被映射到消息属性

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

EDIT2

在任何情况下,根据您的需求,最好不要使用
RabbitMessagingTemplate
,而是使用
RabbitTemplate
MessagePostProcessor
;这样会更有效率

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

将MessagePostProcessor添加到基础RabbitRemplate的BeforePublishPostProcessor

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

编辑

使用标题名称
amqp\u expiration
。请参见
AmqpHeaders.EXPIRATION
。它被映射到消息属性

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

EDIT2

在任何情况下,根据您的需求,最好不要使用
RabbitMessagingTemplate
,而是使用
RabbitTemplate
MessagePostProcessor
;这样会更有效率

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