4

新版本的 Artemis删除了该类JMSQueueControl以及与之关联的所有类。

我们的项目使用 JMS API 来发送/接收/收听,以及管理。我们需要管理队列,包括通过 JMS 消息 ID 将消息从一个队列移动到另一个队列,它是String.

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

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

4

1 回答 1

4

您可以使用管理方法:

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 提供。

于 2017-08-25T13:56:00.387 回答