3.2 数据队列的程序通讯
数据队列(*DTAQ)是系统目标中的一种类型,当建立了这种目标后,一个程序可以发送数据给它,另一个程序再从中接收数据,从而达到程序之间的数据通讯。
3.2.1 数据队列的优点
* 数据队列是两个作业之间进行异步通讯的最快方法。相对数据库文件、消息队列或数据域而言,它需要较少的额外开销。
* 多个作业可以向相同的数据队列送数据和取数据,而数据队列的先进先出、后进先出或关键字顺序排列属性,能够保证数据送取的正确性。
* 在任何高级语言程序中,通过调用系统提供的程序,就可以对数据队列进行操作,而且操作方法灵活方便。数据队列的操作和使用包括两类:第一类使用 CL 命令;第二类调用系统程序。
CL 命令:
CRTDTAQ 建立数据队列
DLTDTAQ 删除数据队列
WRKDTAQ 工作数据队列
系统程序:
QSNDDTAQ 发送数据队列
QRCVDTAQ 接收数据队列
QCLRDTAQ 清除数据队列
QMHQRDQD 检索数据队列
3.2.2 数据队列的发送
需要将数据发送给数据队列,只要在程序中调用QSNDDTAQ 。在 CL 程序中,调用的格式如下:
CALL PGM(QSNDDTAQ) PARM(&QNAME &LIB &FLDLEN &FIELD
+&KEYLEN &KEY)
&QNAME: 是长度为10的字符型,它命名了数据队列,如:IN_Q。
&LIB: 是长度为10的字符型,它命名了数据队列所在的库,如:*LIBL。
&FLDLEN: 是长度为5的数字型,它规定了发送给数据队列的字符数,如:100。
&FIELD: 是长度为&FLDLEN的字符型,它包含了具体发送给数据队列的数据。
&KEYLEN: 是长度为3的数字型,它说明了传送给数据队列的关键字长度,如:6。
&KEY: 是长度为&KEYLEN的字符型,它包含了传送给数据队列的关键字数据。
注:后两个参数可以自选,如果说明了一个,则必须说明另一个。
3.2.3 数据队列的接收
需要从数据队列中接收数据,只要在程序中调用QRCVDTAQ 。在 CL 程序中,调用的格式如下:
CALL PGM(QRCVDTAQ) PARM(&QNAME &LIB &FLDLEN
+ &FIELD &WAIT &ORDER KEYLEN &KEY &SNDRLEN &SNDR)
&QNAME: 是长度为10的字符型,它命名了数据队列。如:OUT_Q。
&LIB: 是长度为10的字符型,它命名了数据队列所在的库。如:*LIBL。
&FLDLEN: 是长度为5的数字型,它规定了发送给数据队列的字符数。
&FIELD: 是长度为&FLDLEN的字符型,它包含了从数据队列中接收到的具体数据。
&WAIT: 是长度为5的数字型,它说明了等待接收数据的时间。负数表示无限制的等待;零表示不等待;正数示要等待的秒数,最大值是9999。这个参数只有在数据队列中无满足条件的数据时, 才起作用。
&ORDER: 是长度为2的字符型,它说明了按关键字接收数据的条件。可用的字符值是:GT、LT、EQ、GE、LE。
&KEYLEN: 是长度为3的数字型,它说明了接收数据队列的关键字长度。
&KEY: 是长度为&KEYLEN的字符型,它标识了用于从数据队列中接收数据的关键字变量。
&SNDRLEN:是长度为3的数字型,它规定了发送者标识的长度。
&SNDR: 是长度为&SNDRLEN 的字符型,它包含了发送者标识的数据。
注:后三个参数可以任选,但是&ORDER、&KEYLEN和&KEY 必须同时说明。
3.2.4 数据队列的清除
需要从数据队列中清除数据,只要在程序中调用 QCLRDTAQ在 CL 程序中,调用的格式如下:
CALL PGM(QCLRDTAQ) PARMM(&QNAME &LIB)
3.2.5 数据队列的检索
需要检索一个数据队列的描述项,只要在程序中调用QMHQRDQD。在 CL 程序中,调用的格式如下:
CALL PGM(QMHQRDQD) PARM(&RCVR &RCVRLEN
+ &FORMAT &DQNAME)
&RCVR: 是长度为&RCVRLEN的字符型,它标识了含有数据队列性的变量。
&RCVRLEN: 是长度为4的数字型,它说明了&RCVR长度。
&FORMAT: 是长度为8的字符型,它定义了接收模板的格式。
&DQNAME: 是长度为20的字符型,它标识了数据队列和所在库,前十个字符是队列名字,后十个字符是库名。