ActiveMQ Artemis 消息 ID

ActiveMQ Artemis message id

我正在处理从 ActiveMQ 5.0 到 ActiveMQ Artemis 的迁移。我看到消息 ID 格式已更改。 5.0 使用客户端 Id 作为前缀,而 Artemis 似乎使用了一种序列。

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

通过ID推断制作人非常方便

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

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

JMS 规范中没有任何内容要求生产者与 JMSMessageID 之间存在相关性,并且任何此类相关性无论如何都只适用于特定的客户端实现。它不适用于代理支持的所有其他类型的客户端(例如 MQTT、STOMP、AMQP 等)。

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