使用 github.com/fmtn/a 将单个消息移动到不同的队列中

问题描述 投票:0回答:1

我有一个使用 ActiveMQ 5.13.4 的 JMS 设置,其中包含多个死信队列 (DLQ),并且我想将特定消息从 DLQ 移回到原始队列中,以便我的应用程序可以在原始错误条件消失后再次处理它们解决了。

我一直在使用名为 A 的 JMS 实用程序,它可以使用

--move-queue
选项将多条消息从一个队列移动到另一个队列。这非常有效,因为您可以使用
--count
选项将所有消息移动到某个数字,例如这会将 10 条消息从 DLQ1 移动到 DLQ2

a.bat -b tcp://192.168.1.100:61616 --count 10 --move-queue DLQ1 DLQ2 -j -U admin -P admin
10 msgs moved from DLQ1 to DLQ2
Operation completed in 172ms (excluding connect)

我想要做的是使用特定消息的 JMS 消息 ID 将其从一个队列移动到另一个队列。

--get
命令确实找到了所需的消息,但它消耗了它,因此它从该点消失了,例如在队列 A1 上获取一条消息。

a.bat --broker tcp://192.168.1.100:61616 --user admin --pass admin --get A1 "JMSMessageID=ID:app02-49195-1696991438815-4:104:1:1:1" -j
-----------------
Message Headers
  JMSCorrelationID: null
  JMSExpiration: 1970 01 01 01:00:00
  JMSDeliveryMode: persistent
  JMSMessageID: ID:app02-49195-1696991438815-4:104:1:1:1
  JMSPriority: 5
  JMSTimestamp: 2023 11 08 07:24:20
  JMSType: null
  JMSDestination: queue://A1
  JMSRedelivered: false
  JMSReplyTo: Not set
Message Properties
Payload:
message
Operation completed in 15ms (excluding connect)

有一个

--selector
选项确实可以找到所需的消息,但我似乎无法让它与
--move-queue option
一起使用 - 它表示操作已完成,但它使用 jms 标头 ID 作为目标队列名称? ?例如

a.bat --broker tcp://192.168.1.100:61616 --user admin --pass admin --move-queue A1 --selector A1 "JMSMessageID=ID:app02-49195-1696991438815-4:106:1:1:1" --move-queue A2 -j
0 msgs moved from A1 to JMSMessageID=ID:app02-49195-1696991438815-4:106:1:1:1
Operation completed in 125ms (excluding connect)

我认为发生的情况是

--selector
选项无法根据
JMSMessageID
进行过滤,因此
--move-queue
选项并没有执行任何操作。
--selector
选项实际上适用于 JMS 标头信息吗?

jms
1个回答
0
投票

我想我现在实际上已经解决了这个问题。有 2 个问题。

  1. 使用 --selector 指定 JMSMessageID 时,必须在 JMSMessageID 周围用双引号引起和结束,并且 ID 本身必须在双引号内用单引号引起来,例如

--选择器“JMSMessageID='ID:app02-49195-1696991438815-4:128:1:1:12'”

如果您不这样做,它将找不到正确的消息。

  1. 您可以使用 --selector 命令作为源队列的一部分,例如

--移动队列 A1 --选择器 "JMSMessageID='ID:49195-1696991438815-4:128:1:1:12'" A2 --jms-标题

因此,使用 JMSMessageID 将单个消息从名为 A1 的队列移动到另一个名为 A2 的队列的最终命令如下。

a.bat --broker tcp://192.168.1.100:61616 -U admin -P admin --move-queue A1 --selector "JMSMessageID='ID:49195-1696991438815-4:128:1:1:12'" A2 --jms-headers 1 条消息从 A1 移至 A2 操作在 141ms 内完成(不包括连接)

© www.soinside.com 2019 - 2024. All rights reserved.