Получить заголовки 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
Другие вопросы по тегам