如何使用 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;