Я изучаю реализацию jmsTemplate и столкнулся с проблемой. JMSMessageId может быть применен к сообщению вручную, но обратный вызов возвращает другой MessageId.
Пример кода:
log.debug("Sending request " + jmsMessageId);
final AtomicReference<Message> msg = new AtomicReference<>();
jmsTemplate.send(destinationQueue,
session -> {
Message message = session.createTextMessage(body);
message.setJMSMessageID(jmsMessageId);
msg.set(message);
return message;
});
log.debug("Request sent " + msg.get().getJMSMessageID());
Вывод:
2019-05-14 15:36:41.308 DEBUG Sending request 2136b3c2-71c7-437a-892f-5e72d27a54f1
2019-05-14 15:36:41.487 DEBUG Request sent ID:414d51205445535420202020202020204be2be5c02e71527
Я ожидал, что оба идентификатора будут одинаковыми.
Из-за документации от IBM:
Свойство JMS_IBM_MQMD_MsgId переопределяет обработку JMS по умолчанию свойства JMSMessageID. Когда интеграция служб преобразует сообщения в формат WebSphere MQ, интеграция служб проверяет, было ли явно задано свойство JMS_IBM_MQMD_MsgId. Если это так, сервисная интеграция устанавливает для поля MQMD MsgId это значение (byte []) и заменяет уникальное значение JMSMessageID, которое JMS выделяет сообщению.
Итак, явно определенный MsgId не должен быть переопределен, только закодирован? Чего-то не хватает в моей конфигурации или это нормальное поведение?