ActiveMQ Artemis / RedHat AMQ 是否没有正确设置 JMS 消息 ID?

Does ActiveMQ Artemis / RedHat AMQ not set JMS Message ID correctly?

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

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

但是,当我使用 MessageConsumer#receive()MessageListener#onMessage() 接收 Message 时,Message#getJMSMessageID() 总是 returns 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 客户端)客户端。

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

  1. JMS 消息 ID 通常存储在名为 userID
  2. 的本机 Artemis header 中
  3. 通过管理控制台发送的消息填充用户ID
  4. 通过 Core JMS 客户端发送的消息执行填充消息 ID
  5. 通过 Qpid 客户端发送的消息使用 JMS 消息 ID
  6. 填充自定义 属性 NATIVE_MESSAGE_ID
  7. 无法通过 JMS 获取内部消息 ID
  8. 如果您通过 Qpid 发送消息并通过 Core 客户端读取它,反之亦然,您将收到一个空的 JMS 消息 ID