2017-02-21 4 views
2

Я использую Spring API, JmsTemplate и MappingJackson2MessageConverter (версия: spring-jms-4.3.4.RELEASE.jar) публиковать сообщения на тему ActiveMQ, как показано в приведенном ниже коде.Spring 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 публикуется в теме. Я искал googled и не мог найти ни одного примера, который сделает это. Вы можете помочь ?

+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' будет выброшено –

Смежные вопросы