第10章:TUXEDO的可靠消息队列(2)

2019-09-02 17:12

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


第10章:TUXEDO的可靠消息队列(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:高一化学-2013-2014学年高一下学期期中考试化学试题

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: