与 MQSeries 相关的 EGL 关键字

当使用与 MQSeries 相关的 EGL 关键字(例如 addscan)时,需要为您想要访问的每个消息队列定义 MQ 记录。记录布局就是消息的格式。

下表列示了关键字。

关键字 用途
add 将 MQ 记录的内容置于指定队列的末尾。

EGL add 语句可以调用最多三个 MQSeries® 命令:
  • MQCONN 将生成的代码与队列管理器连接,当没有连接处于活动状态时,将调用此命令。
  • MQOPEN 与队列建立连接,当有连接处于活动状态,但是未打开队列时,将调用此命令。
  • MQPUT 将记录放到队列中,除非在先前的 MQSeries 调用中发生了错误,否则总是会调用此命令。

在添加 MQ 记录之后,在从同一队列中读取 MQ 记录之前必须先关闭消息队列。

close 放弃对与 MQ 记录相关联的消息队列的访问。

EGL close 语句调用 MQSeries MQCLOSE 命令,当程序结束时,也会自动调用该命令。

如果另一个程序需要访问该消息队列,则在执行 add 或 scan 之后应该关闭该队列。如果程序运行了很长时间并且不再需要进行访问时,就尤其应当进行关闭。
scan 将队列中的第一条消息读取到消息队列记录中,(在缺省情况下)并从队列中除去该消息。

EGL scan 语句可以调用最多三个 MQSeries 命令:
  • MQCONN 将生成的代码与队列管理器连接,当没有连接处于活动状态时,将调用此命令。
  • MQOPEN 与队列建立连接,当有连接处于活动状态,但是未打开队列时,将调用此命令。
  • MQGET 从队列中除去记录,除非在先前的 MQSeries 调用中发生了错误,否则总是会调用此命令。

在读取 MQ 记录之后,在将 MQ 记录添加到同一队列之前必须关闭该队列。

管理器和队列规范

当使用与 MQSeries 相关的 EGL 关键字时,在下列情况下需要标识队列:
  • 在声明时,需要指定逻辑队列名,并且这是通过设置 MQ 记录部件的 queueName 属性完成的。该逻辑队列名充当在运行时访问的队列名的缺省值;但在大多数情况下,该名称只有在作为将 MQ 记录与物理队列相关联的方法时才有意义。逻辑队列名的长度不能超过 8 个字符。
  • 在生成时,使用 buildDescriptor 部件来控制生成过程,而该部件又可以引用资源关联部件。资源关联部件将队列名与物理队列的名称相关联。
  • 在运行时,代码可以更改特定于记录的变量 record.resourceAssociation 中的值以覆盖您在声明时或生成时指定的任何队列名。
物理队列的名称具有以下格式:
  queueManagerName:physicalQueueName
queueManagerName
队列管理器的名称;如果省略此名称,则也将省略冒号
physicalQueueName
指定的队列管理器所知的物理队列名称

当第一次对消息队列记录发出 add 或 scan 语句时,必须指定连接队列管理器,可以将它作为缺省值,也可以不作为缺省值。在最简单的情况下,完全不指定连接队列管理器,而是依赖于 MQSeries 配置中的缺省值。

特定于记录的变量 record.resourceAssociation 始终至少包含给定 MQ 记录的消息队列的名称。

远程消息队列

如果要访问受远程队列管理器控制的队列,则必须执行下列操作:
  • 发出 EGL close 语句以放弃对现在正在使用的队列的访问
  • 设置特定于记录的变量 record.resourceAssociation 以确保以后可以访问远程队列
根据在 MQSeries 中建立队列管理器关系的方式的不同,使用下列两种方法的其中一种来设置 record.resourceAssociation
  • 如果连接队列管理器具有远程队列的本地定义,则按如下方式设置 record.resourceAssociation
    • 对连接队列管理器接受同一个值(通过指定连接队列管理器的名称,或者通过不指定任何名称;在后一种情况下,省略冒号)。
    • 指定远程队列的本地定义的名称。

    然后使用 addscan 语句发出 MQOPEN 以建立对远程队列的访问。

  • 另外,利用远程队列管理器的名称和远程队列的名称来设置 record.resourceAssociation。在这种情况下,不会更改连接队列管理器。接着,使用 addscan 语句发出 MQOPEN 并使用已存在的连接。
使用条款 | 反馈
(C) Copyright IBM Corporation 2000, 2005. All Rights Reserved.