使用数据队列
数据队列是您可以创建的一种系统对象类型,其中一个高级语言 (HLL) 过程或程序可以向其发送数据,另一个 HLL 过程或程序可以从中接收数据。
接收程序可以已在等待数据,也可以稍后接收数据。
使用数据队列的优点包括:
- 使用数据队列可释放作业执行某些工作的机会。 如果作业是交互式作业,那么这可以提供更好的响应时间,并减小交互式程序及其进程访问组 (PAG) 的大小。 这反过来可以帮助整体系统性能。 例如,如果多个工作站用户输入涉及更新和添加到多个文件的事务,那么如果交互式作业将该事务的请求提交到单个批处理作业,那么系统可以执行得更好。
- 数据队列是两个作业之间异步通信的最快方法。 使用数据队列来发送和接收数据比使用数据库文件,消息队列或数据区来发送和接收数据需要更少的开销。
- 可以通过调用 API QSNDDTAQ , QRCVDTAQ , QCLRDTAQ , QMHRDQM , QMHQRDQD 和 QMHQCDQ 来发送,接收,清除,检索数据队列的内容或描述,并更改任何 HLL 过程或程序中数据队列的某些属性,而无需退出 HLL 过程或程序或调用 CL 过程或程序来执行数据队列操作。
- 从数据队列接收数据时,可以设置超时,使作业等待条目到达数据队列。 这与在 OVRDBF 命令上使用 EOFDLY 参数不同,这会导致在延迟时间结束时激活作业。
- 多个作业可以从同一数据队列接收数据。 这在某些应用程序中具有优势,在这些应用程序中,要处理的条目数大于在所需性能限制内可以处理的作业数。 例如,如果多个打印机可用于打印订单,那么多个交互式作业可以将请求发送到单个数据队列。 每个打印机的单独作业可以从数据队列接收,可以采用先进先出 (FIFO) ,最后先进先出 (LIFO) 或键控队列顺序。
- 数据队列能够将发送方标识附加到放置在队列上的每条消息。 发送方标识 (创建队列时建立的数据队列的属性) 包含限定作业名和当前用户概要文件。
除了这些优点外,您还可以记录数据队列。 这允许您将对象恢复到一致状态,即使在发生异常初始程序装入 (IPL) 或崩溃时对象处于某些更改操作的中间。 日志记录还提供将数据队列日志复制到远程系统 (例如,使用远程日志)。 这使系统能够在类似环境中重现操作以复制应用程序工作。
以下示例显示数据队列的工作方式。 多个作业将条目放置在数据队列上。 这些条目由服务器作业处理。 这可能用于使作业将已处理的订单发送到将执行打印的单个作业。 任何数目的作业都可以发送到同一队列。

下面是使用数据队列的另一个示例。 主作业获取工作请求并将条目发送到数据队列 (通过调用 QSNDDTAQ 程序)。 服务器作业从数据队列接收项 (通过调用 QRCVDTAQ 程序) 并处理数据。 服务器作业可以使用另一数据队列向主作业报告状态。
数据队列允许主作业将工作路由到服务器作业。 这将释放主作业以接收下一个工作请求。 可以从同一数据队列接收任意数目的服务器作业。

当数据队列上没有条目时,服务器作业具有以下选项:
- 等待条目放置在队列上
- 等待特定时间段; 如果条目仍未到达,那么继续处理
- 不要等待,立即返回。
当程序需要同时等待来自显示文件, ICF 文件和数据队列的输入时,也可以使用数据队列。 为以下命令指定 DTAQ 参数时:
- Create Display File (CRTDSPF) 命令
- Change Display File (CHGDSPF) 命令
- Override Display File (OVRDSPF) 命令
- Create ICF File (CRTICFF) 命令
- Change ICF File (CHGICFF) 命令
- Override ICF File (OVRICFF) 命令
您可以指示发生以下任何情况时将在其上放置条目的数据队列:
- 从受邀的显示设备按了已启用的命令键或 Enter 键
- 可从邀请的 ICF 会话获取数据
在系统上运行的作业还可以使用 QSNDDTAQ 程序将条目放置在与 DTAQ 参数中指定的数据队列相同的数据队列上。
应用程序调用 QRCVDTAQ 程序以接收放置在数据队列上的每个条目,然后根据该条目是由显示文件, ICF 文件还是 QSNDDTAQ 程序放置在那里来处理该条目。
支持可选择使用 Create Output Queue (CRTOUTQ) 或 Change Output Queue (CHGOUTQ) 命令将数据队列与输出队列相关联。 当假脱机文件在输出队列上处于就绪 (RDY) 状态时,系统记录数据队列中的项。 用户程序可以通过使用 Receive Data Queue (QRCVDTAQ) API 从数据队列接收信息来确定假脱机文件何时在输出队列上可用。