web-dev-qa-db-ja.com

SpringJmsTemplate-カスタムプロパティを追加

以下のコードに示すように、SpringAPIのJmsTemplateMappingJackson2MessageConverter(バージョン: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メッセージにいくつかのカスタムヘッダーを設定したいと思います。私はグーグルで検索しましたが、これを行う例は見つかりませんでした。手伝ってくれますか ?

9
developer

以下に示すように、convertAndSendを送信してJmsTemplateからMessagePostProcessormethodを使用すると、カスタムプロパティを追加できます。

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

次のようなものを試してください。

@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

1
Monzurul Shimul