2017-02-21 47 views
2

我使用了Spring API的JmsTemplateMappingJackson2MessageConverter(版本:spring-jms-4.3.4.RELEASE.jar),如在下面的代碼發佈消息 到ActiveMQ的話題。春天JmsTemplate的 - 添加自定義屬性

的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消息發佈到的話題。 我GOOGLE了,找不到任何這樣做的例子。你能幫我嗎 ?

+0

任何理由typeIdPropertyName = _type? –

回答

5

您可以通過使用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; 
     } 
    }); 
+0

'message.clearProperties();'應該在'setStringProperty'之前加入這一行。否則會拋出'javax.jms.MessageNotWriteableException' –