Apache Artemis:如何将 JMS 消息移动到不同的队列

Apache Artemis: How to move JMS messages to a different queue

Artemis 的新版本 removed class JMSQueueControl 以及与之关联的所有 classes。

我们的项目使用JMSAPI来send/receive/listen,以及管理。我们需要管理队列,包括通过 JMS 消息 ID 将消息从一个队列移动到另一个队列,它是 String 的 GUID 类型。

Artemis 2.2.0 的新版本有一个 QueueControl#moveMessage(long),它显然对内部消息 ID(而不是 JMS 消息 ID)进行操作。

问题是:如何使用 Artemis 版本 2.X 中的 JMS 消息 ID 将消息从一个队列移动到另一个队列?

您可以使用的管理方式:

org.apache.activemq.artemis.api.core.management.QueueControl#moveMessages(java.lang.String, java.lang.String)

它以“过滤器”作为第一个参数。您可以使用过滤器:

AMQUserID='<jmsMessageId>'

  • AMQUserID:这是指用户设置的ID。在本例中,它是 JMS 消息 ID(即由 JMS 客户端设置的 ID)。它不涉及安全凭证。
  • <jmsMessageId>:这是您要移动的 JMS 消息的消息 ID。这就是 JMSQueueControl 首先在幕后所做的事情。

明确地说,在添加对 AMQP、STOMP 和 MQTT 的支持后,JMSQueueControl(以及所有其他特定于 JMS 的管理和配置 类)被移除,因为它不再使用单独的特定于 JMS 的方法来完成核心管理已经提供的相同事情是有意义的 API。