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 客户端实现。
我正在处理从 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 客户端实现。