使用数据队列

数据队列是您可以创建的一种系统对象类型,其中一个高级语言 (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 从数据队列接收信息来确定假脱机文件何时在输出队列上可用。