[z/OS]

z/OS 上的 "批处理异步使用" 样本

CSQ4BCS1 样本程序以 C 形式交付,它演示使用 MQCB 和 MQCTL 异步消耗来自多个队列的消息。

Asynchronous Consumption 样本在批处理环境中运行。 请参阅 其他样本 以了解批处理应用程序。

还有一个在 CICS® 环境中运行的 COBOL 示例,请参见 z/OS 上的 CICS 异步消费和发布/订阅示例

应用程序使用以下 MQI 调用:
  • MQCONN
  • MQOPEN
  • MQCLOSE
  • MQDISC
  • MQCB
  • MQCTL
本主题还提供有关以下标题的信息:

运行 CSQ4BCS1 样本

此样本程序遵循以下语法:

读取语法图跳过可视语法图 CSQ4BCS1 -m队列管理器名称-0打开选项-t运行时间 队列名称1
备注信息:
  • 1 此样本最多支持 10 个队列。 请提供多个队列名称,以便读取来自多个队列的消息。

存在用于运行此程序的样本 JCL,它驻留在 CSQ4BCSC 中。

Batch Asynchronous Consumption 样本程序的设计

样本显示如何按照消息的到达顺序读取来自多个队列的消息。 这将要求更多的代码使用同步 MQGET。 通过异步使用,无需轮询, IBM® MQ将执行线程和存储管理。 在样本程序中,错误写入到控制台。

样本代码具有以下步骤:
  1. 定义单个消息消耗回调函数。
    void MessageConsumer(MQHCONN   hConn,
    MQMD  * pMsgDesc,
    MQGMO  * pGetMsgOpts,
    MQBYTE * Buffer,
    MQCBC  * pContext)
    { ... }
    
  2. 连接到队列管理器。
    MQCONN(QMName,&Hcon,&CompCode,&CReason);
    
  3. 打开输入队列,并将各队列与 MessageConsumer 回调函数相关联。
    MQOPEN(Hcon,&od,O_options,&Hobj,&OpenCode,&Reason);
    cbd.CallbackFunction = MessageConsumer;
    MQCB(Hcon,MQOP_REGISTER,&cbd,Hobj,&md,&gmo,&CompCode,&Reason);
    

    无需为各队列设置 cbd.CallbackFunction;它是只输入字段。 可以将其他回调函数与各队列相关联。

  4. 启动消息的消耗。
    MQCTL(Hcon,MQOP_START,&ctlo,&CompCode,&Reason);
    
  5. 等待用户按 Enter 键,然后停止消息的消耗。
    MQCTL(Hcon,MQOP_STOP,&ctlo,&CompCode,&Reason);
    
  6. 最后,与队列管理器断开连接。
    MQDISC(&Hcon,&CompCode,&Reason);