1

根据 JMS 规范,我在发送时不必指定消息 ID。

当我通过 hawt.io 控制台发送消息JMSProducer#send()或创建消息时,我可以看到消息 ID 被设置为由 Artemis 代理生成的某个内部序列号。

但是,当我使用MessageConsumer#receive()orMessageListener#onMessage()接收 aMessage时,Message#getJMSMessageID()总是返回null.

我可以接收具有非空 JMS 消息 ID 的消息的唯一方法是从不同的 (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-client ) 客户。

我必须在代理上设置一些配置以使其正确填充 JMS 消息 ID?

4

1 回答 1

1
  1. JMS 消息 ID 通常存储在称为 userID 的本机 Artemis 标头中
  2. 通过管理控制台发送的消息填充用户 ID
  3. 通过 Core JMS 客户端发送的消息填充消息 ID
  4. 通过 Qpid 客户端发送的消息使用 JMS 消息 ID 填充自定义属性 NATIVE_MESSAGE_ID
  5. 无法通过 JMS 获取内部消息 ID
  6. 如果您通过 Qpid 发送消息并通过 Core 客户端读取消息,反之亦然,您将收到一个空的 JMS 消息 ID
于 2019-06-17T12:35:40.333 回答