Получить заголовки JMS сразу после отправки сообщения, не используя его
Как я могу получить заголовки JMS-сообщения после отправки сообщения, но без использования сообщения?
это мой код отправки сообщения
jmsTemplate.convertAndSend(que, text, message -> {
LOGGER.info("setting JMS Message header values");
message.setStringProperty(RequestContext.HEADER_ID, id);
// LOGGER.info(message.getJMSMessageId()); -- this gives a null value here
return message;
});
заголовки сообщения генерируются только после того, как сообщение отправлено в очередь, поэтому существует ли простой способ получения заголовков сообщений JMS при использовании MessagePostProcessor?
1 ответ
Решение
Вы не можете получить JmsMessageID
заголовок до фактического отправки сообщения; постпроцессор позволяет вам изменять преобразованное сообщение ТОЛЬКО ДО его отправки.
Тем не менее, ваша вторая ссылка должна работать нормально, так как она сохраняет ссылку на сообщение, к которому вы можете обратиться позже.
РЕДАКТИРОВАТЬ
Подтверждено:
@SpringBootApplication
public class So48001045Application {
public static void main(String[] args) {
SpringApplication.run(So48001045Application.class, args).close();
}
@Bean
public ApplicationRunner runner(JmsTemplate template) {
return args -> {
final AtomicReference<Message> msg = new AtomicReference<>();
template.convertAndSend("foo", "bar", m -> {
msg.set(m);
return m;
});
System.out.println(msg.get().getJMSMessageID());
};
}
}
а также
ID:host.local-61612-1514496441253-4:1:1:1:1