提问者:小点点

ActiveMQ Artemis消息id


我正在进行从ActiveMQ 5.0到ActiveMQ Artemis的迁移。我看到消息Id格式发生了变化。5.0使用客户端Id作为前缀,而Artemis似乎使用了一种序列。

有没有办法以某种方式控制消息ID?

从ID推导生产者非常方便。


共1个答案

匿名用户

简而言之,没有用户可配置的方法来控制JMSMessageID

值得一提的是,从JMSMessageID推断生产者的能力是OpenWire JMS客户端实现的一个怪癖。如JMS规范中所述,客户端实现(即JMS“提供者”)在消息发送时设置消息上的JMSMessageID。ActiveMQ 5. x附带的OpenWire JMS客户端使用生产者ID(可以包括客户端ID)和序列号来生成此值。ActiveMQ Artemis附带的核心JMS客户端使用此方法生成UUID值。Qpid JMS客户端(使用AMQP 1.0并且也受ActiveMQ Artemis支持)仍然使用另一种方法。

JMS规范中没有任何内容需要生产者和JMSMessageID之间的关联,任何这样的关联无论如何都只适用于该特定的客户端实现。它不适用于代理支持的所有其他类型的客户端(例如MQTT、STOMP、AMQP等)。

如果您想识别发送消息的生产者,那么我建议您只需在消息上设置一个带有所需标识的属性。这将适用于所有JMS客户端实现。