2017-02-21 65 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' –