Правильно ли установлен ActiveMQ Artemis / RedHat AMQ для идентификатора сообщения JMS? - PullRequest
0 голосов
/ 17 июня 2019

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

Когда я отправляю сообщение через JMSProducer#send() или когда я создаю сообщение через консоль hawt.io, я вижу, что для идентификатора сообщения установлено некоторое внутреннее последовательное число, сгенерированное брокером Artemis.

Однако, когда я использую MessageConsumer#receive() или MessageListener#onMessage() для получения Message, Message#getJMSMessageID() всегда возвращает null.

Единственный способ получить сообщение с ненулевым идентификатором сообщения JMS - это прочитать сообщение из другой очереди сообщений (IBM) и скопировать все его свойства в сообщение Artemis перед отправкой.

Я проверил это как с AMQ 7.3.0.GA, так и с Apache ActiveMQ Artemis 2.6.2, как с собственным (org.apache.activemq.artemis-jms-client), так и с AMQP (org.apache.qpid.qpid- jms-клиент) клиенты.

Есть ли какая-либо конфигурация, которую я должен установить на брокере, чтобы он правильно заполнял идентификаторы сообщений JMS?

1 Ответ

0 голосов
/ 17 июня 2019
  1. Идентификатор сообщения JMS обычно хранится в собственном заголовке Artemis, который называется userID
  2. Сообщения, отправляемые через консоль управления не заполнение userID
  3. Сообщенияотправлено через основной клиент JMS do заполнить идентификатор сообщения
  4. Сообщения, отправленные через клиент Qpid, заполнить пользовательское свойство NATIVE_MESSAGE_ID с идентификатором сообщения JMS
  5. Нет способа получитьвнутренний идентификатор сообщения через JMS
  6. Если вы отправите сообщение через Qpid и прочитаете его через Core client или наоборот, вы получите нулевой идентификатор сообщения JMS
...