新版本的Artemis删除了类JMSQueueControl
和与之相关的所有类。
我们的项目使用 JMS API 来发送/接收/监听以及管理。我们需要管理队列,包括通过 JMS 消息 ID 将消息从一个队列移动到另一个队列,JMS 消息 ID 是 GUID 类型的String
。
新版本的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已经提供的相同事情不再有意义。