ibm-mq - MQ (Websphere 7) 将消息持久化到文件系统

标签 ibm-mq

我应该如何设置 MQ,以便将收到的每条消息立即写入文件系统? 我有“红皮书”,但至少需要有人至少指出书中的一章或标题来弄清楚。

我们是一家 .NET 商店。我已经通过 API 编写了 C# 来读取队列,我们​​目前使用 BizTalk MQ 适配器。我们的最终目标是将相同的消息写入文件系统中的多个目录,以“克隆”我们各种测试环境(DEV、STAGE、TRAINING 等)的提要。 BizTalk 的问题在于,当我们使用消息时,我们同时将其映射到新消息,因此消息已经更改,我们希望克隆原始原始消息,而不是变形后的消息。我们的供应商不提供提要的多个副本,例如,他们提供 DEV 和 PROD,但我们内部有 4 个系统。

我想我可以做一个 C# Windows 服务来做到这一点,但如果可能的话,我宁愿使用 MQ 的内置功能。

最佳答案

无需配置。如果消息是持久的,WMQ 将它写入磁盘。但是,我认为这对您没有帮助,因为它们不是作为离散消息编写的。没有要复制的磁盘文件,只有当复制的 QMgr 与主 QMgr 相同并且在复制期间处于脱机状态时,复制才有效。

这个问题有很多解决方案,但从 WMQ V7 开始,最简单的方法是使用内置的 Pub/Sub 功能。这假定消息通过 QMgr-to-QMgr channel 到达并登陆队列,然后您在队列中使用它们。

在这种情况下,可以删除队列并在主题上创建同名的别名。然后,您创建一个新队列并定义一个管理订阅,以将有关该主题的消息传送到新队列中。您的应用从新队列中消费。

当您需要将提要发送到另一个 QMgr 或应用程序时,定义一个新的订阅并将其指向新的目标队列。由于这是 Pub/Sub,MQ 将复制原始消息的次数与订阅的次数相同,并且第一个应用程序及其消息不受影响。如果您需要发送到的目标无法通过 MQ channel 访问(例如,DEV 和 QA 可能未连接),您可以将消息传递到新队列,使用来自 SupportPac MO03 的 QLoad将它们写入文件,然后使用 QLoad 的另一个实例将它们加载到不同的 QMgr。如果你想实时移动它们,你可以从SupportPac MA01设置Q程序。将它们直接从 QMgr1 上的新订阅队列移动到 QMgr2 上的目标队列。并且您可以根据需要跨多个系统进行复制。

SupportPacs 主页是 here .

如果您只使用红皮书,您可能想看看信息中心。请务必使用与您正在使用的 WMQ 版本相匹配的信息中心。

关于ibm-mq - MQ (Websphere 7) 将消息持久化到文件系统,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13293522/

相关文章:

java - 将 Java 客户端 (JMS) 连接到 IBM MQ 时出现问题

java - 队列上 IBM MQ 的 IsOpen 和 OpenStatus 属性有何区别?

java - WebSphere MQ 的独立 Java JMS 客户端

jms - 使用 CoD over Camel JMS 组件实现原生 websphere MQ

java - 是否可以更改传出 MQMessage 的 PutApplicationType?

go - 如何设置 SA_ONSTACK 标志

queue - 使用clear命令和mqget api调用来清除队列有什么区别?

java - 在 MQ v6 api 中 - 如何停止 MQQueue get() 方法?

spring - 当应用程序中有多个 @JmsListener 时会发生什么? (就并发而言)

c# - MQRC_ 从 iSeries Websphere 消息队列获取消息时出错