Spring JmsTemplate.setMessageId переопределяется - PullRequest
0 голосов
/ 14 мая 2019

Я изучаю реализацию 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 не должен быть переопределен, только закодирован? Чего-то не хватает в моей конфигурации или это нормальное поведение?

1 Ответ

1 голос
/ 14 мая 2019

setJMSMessageId ничего не делает - от Javadocs .

Этот метод предназначен для использования провайдерами JMS только для установки этого поля при отправке сообщения. Это сообщение не может использоваться клиентами для настройки идентификатора сообщения. Этот метод общедоступен, чтобы поставщик JMS мог установить это поле при отправке сообщения, реализация которого не является его собственной.

(мой акцент).

В любом случае формулировка противоположна тому, что вы делаете ...

Свойство JMS_IBM_MQMD_MsgId переопределяет обработку JMS по умолчанию свойства JMSMessageID. ...

т.е. Вы должны установить свойство JMS_IBM_MQMD_MsgId, и оно переопределит сгенерированный JMSMessageID.

...