【问题标题】:Apache Artemis: How to move JMS messages to a different queueApache Artemis:如何将 JMS 消息移动到不同的队列
【发布时间】:2021-12-31 23:38:22
【问题描述】:

Artemis 的新版本removedJMSQueueControl 以及与之关联的所有类。

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

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

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

【问题讨论】:

  • 我赞成您的回答,感谢您的帮助!

标签: activemq-artemis


【解决方案1】:

您可以使用管理方法:

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 已经提供的相同操作的方法。

【讨论】:

  • 这个有道理,我稍后再试,告诉你。
  • 赞成您的答案正确 - 非常感谢。知道为什么决定退出 JMSQueueControl 吗?这使得升级到 2.2.0 版对我们来说非常痛苦(除了日志格式也发生了变化!)
  • 另外,虽然现在正在工作,但看起来很奇怪,因为用户 ID 不是消息 ID :)
  • 感谢澄清,有道理。
猜你喜欢
  • 2018-01-09
  • 2023-04-01
  • 2011-07-31
  • 1970-01-01
  • 2019-05-04
  • 2016-05-02
  • 1970-01-01
  • 1970-01-01
  • 2016-12-10
相关资源
最近更新 更多