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

时间:2019-06-17 10:34:24

标签: jms activemq-artemis amq

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

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

但是,当我使用MessageConsumer#receive()MessageListener#onMessage()来接收Message时,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吗?

1 个答案:

答案 0 :(得分:0)

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