Spring JmsTemplate - 添加自定义属性

问题描述 投票:0回答:2

我正在使用 Spring API 的

JmsTemplate
MappingJackson2MessageConverter
(版本:
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);
    }
}

MappingJackson2MessageConverter 类:

@Configuration
public class JMSTextMessageConverter {

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

现在,我想为发布到该主题的 JMS 消息设置一些自定义标头。 我用谷歌搜索,找不到任何执行此操作的示例。你能帮忙吗?

java spring jms spring-jms
2个回答
29
投票

您可以使用

convertAndSend
中的
JmsTemplate
方法通过发送
MessagePostProcessor
添加自定义属性,如下所示:

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

替代 lambda 语法:

jmsTemplate.convertAndSend(
            "product.topic", product,
            message -> { message.setStringProperty("my_property", "my_value"); return message;}
    );

3
投票

尝试这样的事情:

@SendTo("product.topic")
public Message<Product> send() {
    Product product = new Product();
    product.setName("abcd");
    product.setPrice(10);

    return MessageBuilder
            .withPayload(product)
            .setHeader("code", 1234) // custom header name and value
            .build();
}

参考:https://spring.io/blog/2014/04/30/spring-4-1-s-upcoming-jms-improvements

© www.soinside.com 2019 - 2024. All rights reserved.