使用 Powershell 将 MSMQ 消息从一个队列移动到另一个队列

Posted

技术标签:

【中文标题】使用 Powershell 将 MSMQ 消息从一个队列移动到另一个队列【英文标题】:Move MSMQ message from one queue to another using Powershell 【发布时间】:2020-07-12 20:54:50 【问题描述】:

我想知道是否可以编写一个 Powershell 脚本将消息从一个 MSMQ 队列移动到另一个?

我在一个错误队列中有一些失败的消息(即未完成的消息,因为它们涉及到例如对已关闭的服务器的调用),我想通过将它们移回它们来重试原始处理队列。我正在使用 NServiceBus v6 处理程序来侦听进入原始处理队列的消息,如果它们被放回该队列,则会重新发送消息。

在使用 Powershell 之前有人这样做过吗?

特别是,我想在 Powershell 中执行以下操作:

    根据消息正文中的特定标识符(字符串)查找消息 将此消息移至特定队列

我知道 Powershell 有诸如Move-MsmqMessage 之类的命令。我一直无法在网上找到可以重复用于此功能的示例。

非常感谢任何帮助。

【问题讨论】:

Move-MsmqMesage 仅适用于子队列,这些子队列本质上只是同一队列中的分区。它不会在队列之间移动消息。 【参考方案1】:

如果您有来自 NServiceBus 的错误队列中的消息,您可以使用此工具将它们返回到它们所在的原始队列。

https://github.com/ParticularLabs/MsmqReturnToSourceQueue

它检查原始队列的标头并再次将它们发送到那里。这个想法是任何端点都可以将消息发送到同一个错误队列。然后它们可以被ServiceControl 或任何其他工具消化。如果您将它们留在错误队列中,此ReturnToSourceQueue 可以将它们发送回原始队列。

【讨论】:

谢谢。这个工具适用于 NServiceBus 6 吗?我的印象是它只适用于 NServiceBus 5 及更低版本,并且从版本 6 开始已被弃用。抱歉,我没有补充说我正在使用 NServiceBus 6。 NServiceBus 5、6 和 7 是有线兼容的,这意味着这些版本之间的消息和标头没有区别。所以它应该可以工作,尽管我已经很长时间没有测试过了。我通常使用 ServicePulse 进行消息重试。但它应该工作,是的。

以上是关于使用 Powershell 将 MSMQ 消息从一个队列移动到另一个队列的主要内容,如果未能解决你的问题,请参考以下文章

为啥将消息放入死信队列 (MSMQ)?

为什么将消息放入死信队列(MSMQ)?

如何在C#中使用MSMQ

MSMQ 上是不是有任何事件或回调将新消息添加到队列中

进行事务处理时消息未到达 MSMQ

MSMQ。将消息正文存储在驱动器上时对其进行加密