设计浏览样本
Browse 样本应用程序使用单个程序模块;在支持的各编程语言中都会提供一个程序模块。
通过程序逻辑的流程为:
- 打开打印数据集并打印报告的标题行。 检查队列管理器和队列的名称是否已从运行 JCL 进行传递。 如果两个名称均已传递,那么打印包含名称的报告行。 如果未传递,那么打印错误消息,关闭打印数据集并停止处理。
程序测试从 JCL 传递的参数的方式取决于编写程序所用的语言; 有关更多信息,请参阅 依赖于语言的设计注意事项。
- 使用 MQCONN 调用连接到队列管理器。 如果此调用不成功,那么打印完成代码和原因码,关闭打印数据集并停止处理。
- 使用带有 MQOO_BROWSE 选项的 MQOPEN 调用打开队列。 在输入此调用时,程序将使用步骤 2中返回的连接句柄。 对于对象描述符结构 (MQOD) ,它使用除队列名称 (在步骤 1 中传递) 以外的所有字段的缺省值。 如果此调用不成功,那么打印完成代码和原因码,关闭打印数据集并停止处理。
- 使用 MQGET 调用浏览队列上的第一条消息。 在此调用的输入中,程序指定:
- 来自步骤 2 和 3 的连接和队列句柄
- 所有字段都设置为其初始值的 MQMD 结构
- 两个选项:
- MQGMO_BROWSE_FIRST
- MQGMO_ACCEPT_TRUNCATED_MSG
- 大小为 80 字节的缓冲区,用于存放从消息复制的数据
MQGMO_ACCEPT_TRUNCATED_MSG 选项允许调用完成,即使消息长度超过调用中指定的 80 字节缓冲区也如此。 如果消息长度超过缓冲区,那么消息会截断以适合缓冲区大小,并且完成代码和原因码设置为显示此大小。 已设计样本,以便消息截断为 80 个字符,以使报告易读。 缓冲区大小由
DEFINE语句设置,因此在需要的情况下可以轻松对其进行更改。 - 执行以下循环,直至 MQGET 调用失败:
- 打印显示以下内容的报告行:
- 消息的序列号(这是浏览操作的计数)。
- 消息的实际长度(不是已截断的长度)。 该值在 MQGET 调用的 DataLength 字段中返回。
- 消息数据的前 80 个字节。
- 将 MQMD 结构的
MsqId和CorrelId字段重置为空值 - 使用带有以下两个选项的 MQGET 调用浏览下一条消息:
- MQGMO_BROWSE_NEXT
- MQGMO_ACCEPT_TRUNCATED_MSG
- 打印显示以下内容的报告行:
- 如果 MQGET 调用失败,请测试原因码以查看调用是否失败,因为浏览光标已到达队列结尾。 在此情况下,打印 报告结束 消息并转至步骤 7 ; 否则,打印完成代码和原因码,关闭打印数据集,停止处理。
- 使用带有步骤 3中返回的对象句柄的 MQCLOSE 调用来关闭队列。
- 使用带有步骤 2中返回的连接句柄的 MQDISC 调用与队列管理器断开连接。
- 关闭打印数据集并停止处理。