Spring JmsTemplate - 添加自定义属性

dev*_*per 9 java spring jms spring-jms

我正在使用Spring API JmsTemplateMappingJackson2MessageConverter(version spring-jms-4.3.4.RELEASE.jar:)将消息发布到ActiveMQ主题,如下面的代码所示.

TopicPublisher类:

@Component
public class TopicPublisher {

    @Autowired
    private JmsTemplate jmsTemplate;

    @Autowired
    private MessageConverter messageConverter;

    public void send() {
        Product product = new Product();
        product.setName("abcd");
        product.setPrice(10);

        jmsTemplate.setMessageConverter(messageConverter);
        jmsTemplate.convertAndSend("product.topic", product);
    }
}
Run Code Online (Sandbox Code Playgroud)

MappingJackson2MessageConverter类:

@Configuration
public class JMSTextMessageConverter {

    @Bean
    public MessageConverter jacksonJmsMessageConverter() {
        MappingJackson2MessageConverter mappingJackson2MessageConverter 
             = new MappingJackson2MessageConverter();
        mappingJackson2MessageConverter.setTargetType(MessageType.TEXT);
        mappingJackson2MessageConverter.setTypeIdPropertyName("_type");
        return mappingJackson2MessageConverter;
    }   
}
Run Code Online (Sandbox Code Playgroud)

现在,我想为发布到主题的JMS消息设置一些自定义标头.我用谷歌搜索,找不到任何这样做的例子.你能帮我吗 ?

vic*_*let 16

您可以通过发送使用convertAndSend方法添加自定义属性,如下所示:JmsTemplateMessagePostProcessor

jmsTemplate.convertAndSend("product.topic", product, new MessagePostProcessor() {
        @Override
        public Message postProcessMessage(Message message) throws JMSException {
            message.setStringProperty("my_property", "my_value");
            return message;
        }
    });
Run Code Online (Sandbox Code Playgroud)

  • jmsTemplate.convertAndSend("product.topic", product, m -> { m.setStringProperty("my_property", "my_value"); return m }); (3认同)