Spring JmsTemplate-добавить пользовательское свойство
Я использую API Spring 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, публикуемого в теме. Я погуглил и не смог найти ни одного примера, который делает это. Вы можете помочь ?
2 ответа:
Вы можете добавить пользовательские свойства, используя метод
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; } });
Попробуйте что-нибудь вроде этого:
@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