我正在尝试编写一个脚本,该脚本将在传递MQ队列名称时指示队列的“末尾”,即谁放消息,谁放消息。
要建立执行此操作的手动方法(在我将其自动化之前),我随机选择了一个QLOCAL并使用CA-Sysview,我使用MQROBJ屏幕来查看队列中的CICS区域PUT消息之一和MQ CHIN启动任务GET,使消息不在队列中。
但是我看不到消息的去向。由于这是QLOCAL,但它是CHIN作业,它从中删除消息,因此我假设某个远程队列管理器将此队列定义为QREMOTE,并针对该队列发出GET。
我们可以访问常规的z / OS MQ命令和CA-Sysview
我可以建立将消息从队列中取出的远程队列管理器吗?
答案 0 :(得分:3)
为了确定队列使用图的两端,请在QLOCAL上尝试以下命令。
DISPLAY CONN(*) TYPE(ALL) ALL WHERE(OBJNAME EQ local-q-name)
并查找以下字段; APPLTYPE
,APPLTAG
,OPENOPTS
,CHANNEL
,CONNAME
通过查看输出中的OPENOPTS
字段,您可以判断该应用程序是轻击棒还是轻击棒。如果它说MQOO_OUTPUT
则表示是轻击棒,如果说MQOO_INPUT_*
则表示是轻击棒。
如果应用程序中填写了CHANNEL
名称,则使用该队列的连接出现在通道中。您必须转到CONNAME
描述的机器,然后从那里进行进一步调查。您应该能够通过使用通道名称来区分客户端应用程序和发送者/接收者通道之间的区别。
如果要跟踪发送者/接收者通道之间的路径,则必须在远程计算机上查看QREMOTE定义。尝试如下命令:-
DISPLAY QREMOTE(*) ALL WHERE(RNAME EQ local-q-name)
答案 1 :(得分:0)
远程队列管理器不会“使消息脱离队列”。那根本不可能。由于您提到了z / OS,因此存在可能涉及共享队列的模式,但这更像是一个不同的本地qmgr,而不是远程的qmgr。
如果本地CHIN被定义为传输队列(USAGE = XMITQ)并且有关联的通道,它将把消息从队列中移出以发送给远程队列管理器。到那时,您知道了什么是远程qmgr。
如果该队列不是传输队列,则涉及通道的唯一方法是将CLIENT应用程序连接到您的队列管理器。然后,查看QSTATUS和CHSTATUS应该提供有关正在进行的工作的信息。
更一般地,有 种方法来确定消息通过MQ网络所采用的路径-研究dspmqrte命令。即使它不是z / OS上的MQ产品的一部分,也可以从另一个平台作为客户端应用程序运行它。