Error queue name:
当一个消息重试了指定的次数,还没有被取出时,TUXEDO把该消息发送到该QUEUE中,如果你输入了ERROR QUEUE NAME,你必须用QCREATE创建该QUEUE,如果没有创建ERROR QUEUE,那么本来应该发送到ERROR QUEUE中的消息将被丢弃.
Initialize extents (y, n [default=n]): 是否初始化该QUEUE SPACE
注意:
因为在创建QUEUE SPACE过程中会用到IPC资源,所以如果在创建QUEUE SPACE 时失败,在重新创建之前,最好把这些IPC资源释放掉,可在QMAMIN中用ipcrm命令释放某个QUEUE SPACE所占用的IPC资源。
QUEUE 的创建 > qcreate
Queue name: service1
Queue order (priority, time, fifo, lifo): fifo
Out-of-ordering enqueuing (top, msgid, [default=none]): none Retries [default=0]: 2
Retry delay in seconds [default=0]: 30
High limit for queue capacity warning (b for bytes used, B for blocks used, % for percent used, m for messages [default=100%]): 80% Reset (low) limit for queue capacity warning [default=0%]: 0% Queue capacity command:
No default queue capacity command Queue 'service1' created
参数说明:
Queue name: 要创建的QUEUE的名称
Queue order (priority, time, fifo, lifo): fifo 发送到该QUEUE的消息的存放方式,
priority:按优先级(在tpenqueue()的TPQCTL参数中指定) time:按时间(在tpenqueue()的TPQCTL参数中指定) fifo:先进先出 lifo:先进后出
Out-of-ordering enqueuing (top, msgid, [default=none]): none
指定一个消息可以放在该QUEUE的最前面,或在某个MSGID值为在tpenqueue()的TPQCTL参数中指定的值之后.
Retries [default=0]: 2
默任情况下,当从一个QUEUE中取出某个MESSAGE的事务回滚时,该MESSAGE会被重新放回到该QUEUE中,当该消息又处于该QUEUE的最前面时,TMQUEUE将再次试图取出该消息,你可以在这里指定重试的次数.默认值为0,也就时不进行重试.当达到重试的次数时,如
果该QUEUE SPACE设置了ERROR QUEUE,那么该消息将被移到该ERROR QUEUE中,如果该QUEUE SPACE没有设置ERROR QUEUE,那么该消息将被丢弃. Retry delay in seconds [default=0]: 30 指定重试的时间间隔
High limit for queue capacity warning (b for bytes used, B for blocks used, % for percent used, m for messages [default=100%]): 80%
Reset (low) limit for queue capacity warning [default=0%]: 10%
Queue capacity command: /usr/app/bin/mailme myqueuespace service1
以上3个设置,当该QUEUE中的消息对空间的使用或消息数达到设定的值时, TUXEDO系统系统自动执行一个命令,以达到对该QUEUE进行自动管理的目的. 在以上的设置中,当该QUEUE中,当该QUEUE的80%空间被使用时,将执行 /usr/app/bin/mailme, myqueuespace service1是mailme的参数.
当第一次到达80%之后, /usr/app/bin/mailme被执行,只有当降为10%之后,又 到达80%时, /usr/app/bin/mailme才再次被执行.
Reply Queue 和Failure Queue
当采用转发方式时,TMQFORWARD把它用TPCALL()调用的与该QUEUE同名的SERVICE的处理结果放到REPLY QUEUE中,该REPLY QUEUE的名字在tpeuqueue()中指定,如果该SERVICE处理失败,TPRETURN(TPFAIL?.),那么TMQFORWARD将把错误信息写到FAILUER QUEUE中,如果没有创建Reply QUEUE 或 Failure Queue,TMQFORWARD将把该SERVICE的返回丢弃,调用tpdequeue()的客户端将收不到任何信息,如果创建了REPLY QUEUE,那么即使该SERVICE没有返回信息,TMQFORWARD也会往该REPLY QUEUE中写入一条长度为0的消息.客户端可以收到该消息.
Error Queue
当一个消息重试了指定的次数,还没有被取出时,TUXEDO把该消息发送到该QUEUE中,如果你输入了ERROR QUEUE NAME,你必须用QCREATE创建该QUEUE,如果没有创建ERROR QUEUE,那么本来应该发送到ERROR QUEUE中的消息将被丢弃. 在创建ERROR QUEUE时,以下几个参数不能设置.
Queue order (priority, time, fifo, lifo):
Out-of-ordering enqueuing (top, msgid, [default=none]): Retries [default=0]: Retry delay in seconds
UBBCONFIG中要做的配置
GROUP中的配置
在GROUP中的配置与数据库通过XA协议与TUXEDO连接的配置差不多, 因为QUEUE SPACE 是资源管理器,而一个组只能有一个资源管理器。所以QUEUE SPACE 与 QUEUE SERVER GROUP 之间是一对一的关系, 在GROUP中的配置有: 在GROUP中必须有以下配置:
1. TMS(TRANSACTION MANAGEMENT SERVER): TMS_QM
2. OPENINFO,
它的设置格式如下: OPENINFO=\ TUXEDO/QM:为/Q所对应的资源管理器的名称,在$TUXDIR/UDATAOBJ/RM指定
device_name指定存储该QUEUE SPACE的设备(文件)名,queue_space_name为该QUEUE SPACE的名称 在UNIX下为: *GROUPS QUE1
LMID = SITE1 GRPNO=2
TMSNAME = TMS_QM TMSCOUNT = 2
OPENINFO = “TUXEDO/QM:/home/QUE:QSPACE”
在NT下为: *GROUPS QUE1
LMID = SITE1 GRPNO=2
TMSNAME = TMS_QM TMSCOUNT = 2
OPENINFO = “TUXEDO/QM:d:\\qsample\\QUE;QSPACE”
在SERVER中要做的配置:
在SERVER这一节中要配置TMQUEUE(必须),TMQFORWARD(可选)这两个SERVER, TMQUEUE的设置格式如下:
TMQUEUE CLOPT=“-s QSPACENAME:TMQUEUE -- [-t trantime]”
-s:指定该SERVER要发布的SERVICE的名称,采用别名方式:QUEUE SPACE的名字加上TMQUEUE -t:当在该SERVER中的SERVICE调用了tpbegin()时,用于指定这些事务的超时时间.默认值 为30秒. 例子:
*SERVERS
TMQUEUE SRVGRP = QUE1 SRVID = 1 CLOPT = “-s QSPACE:TMQUEUE -- -t 60”
TMQFORWARD的的设置格式如下:
TMQFORWARD CLOPT=“-- -q qname[,qname...] [-t trantime] [-i idletime] [-e] [-d] [-n] [-f delay]”
-q qname[,qname...] 用,隔开的QUEUE的名称,TMQFORWARD将从这些QUEUE中取数据,并用TPCALL调用与该QUEUE同名的SERVICE进行处理.
-t:当在该SERVER中的SERVICE调用了tpbegin()时,用于指定这些事务的超时时间.默认值
为60秒.
-i: 指定当该QUEUE中的消息都已被取出后,隔多长时间,TMQFORWARD再次读该QUEUE看是
否有新的消息到来.
-e: 如果再这些QUEUE中都没有消息,那么TMQFORWARD将退出.
-d: 把导致TMQFORWARD所调用的SERVICE失败(TPERRNO=TPESUCFAIL)的消息从REPLYQ 中
删除.使它不用再被重试. -n: 当TMQFORWARD调用TPCALL时,TPCALL()的FLAG为:TPNOTRAN -f delay: TMQFORWARD采用TPFORWARD方式而不是TPCALL方式调用与QUEUE同名的SERVICE 例子: *SERVERS
TMQFORWARD SRVGRP=QUE1 SRVID = 5 CLOPT=”-- -i 2 -q STRING”
10.3 /Q的编程
/Q的编程接口很简单,包括一个结构体TPQCTL,及函数tpenque(),tpdequeue(),下面分别说明.
TPQCTL结构体
TPQCTL结构体用于tpenque(),tpdequeue()中指定或传递与/Q有关的参数,它在atmi.h中的定义如下:
struct tpqctl_t { }
long flags;
/* control parameters to queue primitives */ /* absolute/relative time for dequeuing */ /* enqueue priority */
/* indicates which of the values are set */
long deq_time; long priority;
long diagnostic; /* indicates reason for failure */
char msgid[TMMSGIDLEN]; /* id of message before which to queue */ char corrid[TMCORRIDLEN];/* correlation id used to identify message */ char replyqueue[TMQNAMELEN+1]; CLIENTID cltid; long urcode; long appkey;
/* queue name for reply message */
char failurequeue[TMQNAMELEN+1];/* queue name for failure message */
/* client identifier for originating client */ /* application user-return code */
/* application authentication client key */
typedef struct tpqctl_t TPQCTL;
/* application user-return code */
long appkey;
/* application authentication client key */
说明:
long flags: 指定该结构中的那些域将被设置 long deq_time: 指定什么时候该消息将可用 long priority: 指定该消息的优先级
long diagnostic:保存错误信息
char msgid[TMMSGIDLEN]:系统产生的用于唯一标识该消息的ID号.
char corrid[TMCORRIDLEN]:可以为一个MESSAGE指定一个CORRID,这个值是不变的,所以跟
该MESSAGE有关的REPLY MESSAGE或FAILURE MESSAGE能够被识别. char replyqueue[TMQNAMELEN+1]:REPLY QUEUE的名称
char failurequeue[TMQNAMELEN+1]:FAILURE QUEUE的名称 CLIENTID cltid: 调用TPENQUUE()或tpdequeue()的客户端的ID
long urcode: tpreturn()中指定的urcode
long appkey: 如果TUXEDO应用系统采用安全认证方式,TUXEDO给通过认证的客户端返回
的一个KEY,用于标识该客户端。
tpenqueue()
int tpenqueue (char *qspace, char *qname, TPQCTL *ctl,char *data, long len, long