如何使用 esql 禁止消息流中的队列?
How to inhibit a queue from message flow using esql?
我正在研究 IIB 10 toolkit.I 必须停止侦听 queue.How 的消息流以使用 esql 命令禁止来自另一个服务的该消息流的输入队列?我知道 mqsc更改队列的命令,但不知道如何从 esql code.Please 帮助中执行相同的操作。
您好,请找到以下代码:
我从一个论坛上得到这个,但我仍然对这段代码有疑问,比如如何指定队列关联的 q 管理器。
CREATE NEXTSIBLING OF OutputRoot.Properties DOMAIN 'MQMD';
CREATE NEXTSIBLING OF OutputRoot.MQMD DOMAIN 'MQADMIN' NAME 'MQPCF';
CREATE FIELD OutputRoot.MQPCF;
DECLARE refRequest REFERENCE TO OutputRoot.MQPCF;
SET refRequest.Command = MQCMD_CHANGE_Q;
/* First parameter: Queue Name. */
SET refRequest.Parameter[1] = MQCA_Q_NAME;
SET refRequest.Parameter[1].* = 'TEST.IN';
/* Second parameter: Queue Type. */
SET refRequest.Parameter[2] = MQIA_Q_TYPE;
SET refRequest.Parameter[2].* = MQQT_LOCAL ;
/* Third parameter: Allow/Inhibit GET.*/
SET refRequest.Parameter[3] = MQIA_INHIBIT_GET;
SET refRequest.Parameter[3].* = MQQA_GET_INHIBITED;
SET OutputRoot.BLOB.BLOB = asbitstream(OutputRoot.MQPCF);
SET OutputRoot.MQPCF = null;
SET OutputRoot.MQMD.Format = MQFMT_ADMIN;
您唯一的选择是创建一个外部程序来发出 MQ PCF 命令或使用 MQSET API 调用。两者都相当简单。
您可以在 C、COBOL、C#、Java 等语言中使用 MQSET
在Java中,你会做:
MQQueue queue = qMgr.accessQueue("TEST.Q1", CMQC.MQOO_SET + CMQC.MQOO_FAIL_IF_QUIESCING);
queue.setInhibitGet(CMQC.MQQA_GET_INHIBITED);
您可以查看此博客 posting 以获得完整的 Java 程序,该程序将针对具有禁止或允许的队列的获取和放置属性发出 MQSET API 调用。
你似乎不明白 IIB 的工作原理。
您可以通过设置消息流输出节点的方式来指定 QM。
您仅使用 ESQL 来构建 PCF 消息。您应该查看 MQCFH 解析器。
然后您通过指向 QM 和 SYSTEM.ADMIN.COMMAND.QUEUE queue 的 MQ 输出节点在消息流中发送该消息。
您的代码似乎错误只是因为它转换为 BLOB,这不是必需的,并且它没有设置一些 header 值。
检查此 link 以获得更详细的示例:
https://www.ibm.com/support/knowledgecenter/en/SSMKHH_10.0.0/com.ibm.etools.mft.doc/ac16915_.html
我相信这段代码应该可以用于构建命令消息,但我现在不能尝试:
CREATE NEXTSIBLING OF OutputRoot.Properties DOMAIN 'MQMD';
CREATE NEXTSIBLING OF OutputRoot.MQMD DOMAIN 'MQADMIN'
NAME 'MQPCF';
DECLARE refRequest REFERENCE TO OutputRoot.MQPCF;
SET OutputRoot.MQMD.MsgType = MQMT_REQUEST;
SET OutputRoot.MQMD.ReplyToQ = 'REPLYQ';
SET refRequest.Type = MQCFT_COMMAND;
SET refRequest.StrucLength = MQCFH_STRUC_LENGTH;
SET refRequest.Version = MQCFH_CURRENT_VERSION;
SET refRequest.Command = MQCMD_CHANGE_Q;
SET refRequest.MsgSeqNumber = 1;
SET refRequest.Control = MQCFC_LAST;
SET refRequest.Parameter[1] = MQCA_Q_NAME;
SET refRequest.Parameter[1].* = ‘QYOUWANTTOINHIBIT’;
SET refRequest.Parameter[2] = MQIA_Q_TYPE;
SET refRequest.Parameter[2].* = MQQT_LOCAL;
SET refRequest.Parameter[3] = MQIA_INHIBIT_GET;
SET refRequest.Parameter[3].* = MQQA_GET_INHIBITED;
RETURN TRUE;
我正在研究 IIB 10 toolkit.I 必须停止侦听 queue.How 的消息流以使用 esql 命令禁止来自另一个服务的该消息流的输入队列?我知道 mqsc更改队列的命令,但不知道如何从 esql code.Please 帮助中执行相同的操作。
您好,请找到以下代码: 我从一个论坛上得到这个,但我仍然对这段代码有疑问,比如如何指定队列关联的 q 管理器。
CREATE NEXTSIBLING OF OutputRoot.Properties DOMAIN 'MQMD';
CREATE NEXTSIBLING OF OutputRoot.MQMD DOMAIN 'MQADMIN' NAME 'MQPCF';
CREATE FIELD OutputRoot.MQPCF;
DECLARE refRequest REFERENCE TO OutputRoot.MQPCF;
SET refRequest.Command = MQCMD_CHANGE_Q;
/* First parameter: Queue Name. */
SET refRequest.Parameter[1] = MQCA_Q_NAME;
SET refRequest.Parameter[1].* = 'TEST.IN';
/* Second parameter: Queue Type. */
SET refRequest.Parameter[2] = MQIA_Q_TYPE;
SET refRequest.Parameter[2].* = MQQT_LOCAL ;
/* Third parameter: Allow/Inhibit GET.*/
SET refRequest.Parameter[3] = MQIA_INHIBIT_GET;
SET refRequest.Parameter[3].* = MQQA_GET_INHIBITED;
SET OutputRoot.BLOB.BLOB = asbitstream(OutputRoot.MQPCF);
SET OutputRoot.MQPCF = null;
SET OutputRoot.MQMD.Format = MQFMT_ADMIN;
您唯一的选择是创建一个外部程序来发出 MQ PCF 命令或使用 MQSET API 调用。两者都相当简单。
您可以在 C、COBOL、C#、Java 等语言中使用 MQSET
在Java中,你会做:
MQQueue queue = qMgr.accessQueue("TEST.Q1", CMQC.MQOO_SET + CMQC.MQOO_FAIL_IF_QUIESCING);
queue.setInhibitGet(CMQC.MQQA_GET_INHIBITED);
您可以查看此博客 posting 以获得完整的 Java 程序,该程序将针对具有禁止或允许的队列的获取和放置属性发出 MQSET API 调用。
你似乎不明白 IIB 的工作原理。 您可以通过设置消息流输出节点的方式来指定 QM。
您仅使用 ESQL 来构建 PCF 消息。您应该查看 MQCFH 解析器。
然后您通过指向 QM 和 SYSTEM.ADMIN.COMMAND.QUEUE queue 的 MQ 输出节点在消息流中发送该消息。
您的代码似乎错误只是因为它转换为 BLOB,这不是必需的,并且它没有设置一些 header 值。 检查此 link 以获得更详细的示例: https://www.ibm.com/support/knowledgecenter/en/SSMKHH_10.0.0/com.ibm.etools.mft.doc/ac16915_.html
我相信这段代码应该可以用于构建命令消息,但我现在不能尝试:
CREATE NEXTSIBLING OF OutputRoot.Properties DOMAIN 'MQMD';
CREATE NEXTSIBLING OF OutputRoot.MQMD DOMAIN 'MQADMIN'
NAME 'MQPCF';
DECLARE refRequest REFERENCE TO OutputRoot.MQPCF;
SET OutputRoot.MQMD.MsgType = MQMT_REQUEST;
SET OutputRoot.MQMD.ReplyToQ = 'REPLYQ';
SET refRequest.Type = MQCFT_COMMAND;
SET refRequest.StrucLength = MQCFH_STRUC_LENGTH;
SET refRequest.Version = MQCFH_CURRENT_VERSION;
SET refRequest.Command = MQCMD_CHANGE_Q;
SET refRequest.MsgSeqNumber = 1;
SET refRequest.Control = MQCFC_LAST;
SET refRequest.Parameter[1] = MQCA_Q_NAME;
SET refRequest.Parameter[1].* = ‘QYOUWANTTOINHIBIT’;
SET refRequest.Parameter[2] = MQIA_Q_TYPE;
SET refRequest.Parameter[2].* = MQQT_LOCAL;
SET refRequest.Parameter[3] = MQIA_INHIBIT_GET;
SET refRequest.Parameter[3].* = MQQA_GET_INHIBITED;
RETURN TRUE;