【问题标题】:Put messages to MQ queue from command-line从命令行将消息放入 MQ 队列
【发布时间】:2017-06-21 16:50:47
【问题描述】:

作为我们应用程序安装的一部分,我需要将一堆 xml 消息放入一个 MQ 队列中。为使其更复杂,消息需要设置 RFH2-header 的 usr-folder。

我发现来自 IBM RFHUtil 的mqput2.exe 是完成这项任务的理想工具。不幸的是,我无法进行 usr 文件夹的设置,文档太模糊了。我究竟做错了什么?或者,是否有其他可用的命令行工具效果更好?

我的道具。 mqput2 的文件如下所示:

[header]
.....
*
* message type
*
* Allowed values for message type
*  1 - request
*  2 - reply
*  4 - report
*  8 - datagram
*  112 - MQE fields from MQE
*  113 - MQE fields
*  65536 to 999,999,999 - user
msgtype=8
.....
*
* rfh usage
* rfh = N for No rfh
* rfh = A for Automatic (look for RFH at beginning of data file)
* rfh = 1 or V1 for Version 1 rfh from parameters in parm file
* rfh = 2 or V2 for Version 2 rfh from parameters in parm file
* rfh = X for special V2 rfh with fixed portion only and format=xml
*
* only first character checked, except for V when second character is also checked
*
rfh=X

<usr>
  <NotificationType>RDS.Codebook.Changes</NotificationType>
</usr>
.....
[filelist]
file1.xml

mqput2 只是忽略 &lt;usr&gt; 部分,并且不将其包含在消息中。我也尝试过rfh=A 并将&lt;usr&gt; 部分放在file1.xml 文件的开头,但随后出现MQPUT 错误reason=2142(无效的MQ 标头结构)。

【问题讨论】:

  • rfh=2 应该是正确的
  • rfh=2 不允许添加 usr 参数,至少根据文档:“如果指定了特定文件夹中的单个字段...此技术不能用于 pscr 或usr 文件夹...”(来自 RFHUtil 的 ih03.doc,第 88 页)。无论如何,更改为 rfh=2 后,我得到原因代码 2142。
  • 查看第82页和第83页:“如果RFH参数设置为值2,那么该实用程序将构建一个RFH标头并在写入消息时将其插入数据之前。 RFH 标头中的文件夹可以指定为单个字段或 XML 格式的文本块。"

标签: ibm-mq


【解决方案1】:

dmpmqmsg 实用程序也是 WMQ8 安装的一部分,可用于从命令行发送消息。可以通过

从包含标头的队列中导出消息
dmpmqmsg -m queue_manager> -I <queue> -f <msg_file> -a

然后通过再次提交(我认为,请参阅文档)

dmpmqmsg -m queue_manager> -o <queue> -f <msg_file>

但此实用程序不是 WMQ 7.5 的一部分。

【讨论】:

  • 要备份队列中的数据,您可以使用 IBM 的 MO03 SupportPac (aka QLOAD)。这个来自 IBM 的 SupportPac 已被撤回,因为在产品的 v8 中它被集成并重命名为 dmpmqmsg。对于 v8 之前的 MQ 版本,您仍然可以通过上述链接下载 MQ03 SupportPac。 SupportPac 的原作者现在还维护一个名为QLOAD 的程序版本。
  • 查看我的回复以发布“How to IBM MQ - Backup and Clearing Messages on queues in linux?”以获取更多信息。
  • 是的,他们在您的链接中明确写道“MO03 qload 现在(来自 MQ v8)是产品的一部分 - 重命名为 dmpmqmsg”。所以qload 是 WMQ 7.5 的dmpmqmsg 的前身。
  • 只是为 v8 之前的 MQ 提供了两种替代方案。
【解决方案2】:

我是这样设置的,效果很好:

[header]
qname=QName
qmgr=QMName
msgcount=1
format= "MQSTR   "
codepage=1208
rfh=2
<usr>
<test>test</test>
</usr>
[filelist]
test.xml

【讨论】:

  • 这行得通,谢谢!不仅 rfh 必须为 2,而且 format 必须为 MQSTR。这很奇怪,因为从 RFHUtil 本身来看,必须使用格式 MQHRF2,而格式 MQSTR 不包含 RFH 标头!?!
猜你喜欢
  • 1970-01-01
  • 2019-01-07
  • 2021-06-09
  • 2015-02-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多