将 MQ 消息从一个队列复制到另一个队列

Posted

技术标签:

【中文标题】将 MQ 消息从一个队列复制到另一个队列【英文标题】:Copy MQ Messages from one Queue to another 【发布时间】:2017-07-21 09:17:16 【问题描述】:

问题

是否可以将 MQ 消息从一个队列管理器/队列复制到另一个队列管理器/队列?

场景

我有一个“PROD”队列管理器,当它在其队列上收到消息时,我想将消息“复制”到“TEST”队列管理器上的队列中。

要求

原始消息必须留在 PROD 队列中才能正常处理。 这必须是一个自动化的过程(一天中有很多消息)。我无法逐条消息地进行干预。 如果可能的话,我希望通过一些本机 MQ 功能而不是临时程序/脚本来实现这一点。 复制必须尽可能接近实时 必须使用 MQ 版本为 7.0.2.1(!)。这无法更改。 必须在 Red Hat Enterprise Linux Server 5.11 (Tikanga) 上运行。同样,无法更改。

我不是 MQ 专家,所以请使用小词

提前致谢

【问题讨论】:

【参考方案1】:

gouda 指出的technote 的唯一问题是 MQ 将修改/更改每条复制消息的 MsgId 和 CorrelId。

如果 MsgId 和/或 CorrelId 字段很重要,那么唯一的其他选项是复制消息的 MQ API 出口。您可能需要像 MQ Message Replication 这样的商业产品。

下一个问题是如何将消息从 PROD 队列移动到 TEST 队列?您绝对不想在 PROD 队列管理器和 TEST 队列管理器之间创建通道。

有很多工具可以将 PROD 消息卸载到文件中,然后您可以将文件移动到 TEST 环境中,然后将消息加载到 TEST 队列中。这是可以做到的MQ tools 的列表。您应该尝试的 2 个工具是:MQ Batch Toolkit 和 QLoad。

就我个人而言,我会创建一个计划任务 (CRONTAB),在每晚午夜运行以关闭消息,并且我会让文件名包含日期和时间。脚本的最后一步是压缩/压缩文件并删除原始文件(因为您卸载的数据可能很大)。

因此,任何时候您想要特定日期的 PROD 消息,只需将文件复制到您的 TEST 服务器并解压缩/解压缩并将其加载到队列中。

【讨论】:

您说“您绝对不想在 PROD 队列管理器和 TEST 队列管理器之间创建通道。”。这是出于“MQ 原因”还是出于良好实践,即保持 PROD 数据孤立?谢谢 最佳实践 & 它将避免发生简单的事故。潘多拉的盒子——你只是不想打开它,因为可能/将会发生坏事。【参考方案2】:

您所需要的只是 mqadmin 员工和technote

【讨论】:

谢谢,我今天会复习一下

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

如何将消息复制到 RabbitMQ 上的另一个队列?

消息队列实现复制的最佳实践

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

从0到1设计一个MQ消息队列

MQ消息队列的12点核心原理总结

分布式消息队列之kafka