先介绍一些基本概念:
/Q
指TUXEDO的可靠消息队列,是TUXEDO产品的一个组成部分,功能类似于IBM的
MQSeries,BEA MessageQ等其他消息中间件。
message
消息,存储在QUEUE中的数据称为消息(MESSAGE),一个QUEUE中可以有多条消息.对QUEUE的操作是以消息为单位的,即以次只能发送或取出一条消息。
queue
队列,用于保存发送来的消息,以便随后的处理,一个QUEUE中可以同时存在多条消息。
queue space
队列空间,是QUEUE的一个集合,以便进行统一管理,一个QUEUE SPACE中可包含多个QUEUE。
TMQUEUE
TUXEDO带的一个SERVER,接收用tpenqueue()发送来的消息.并把他们保存到相应的
QUEUE中,接受并处理tpdequeue()的请求。
tmqforward
TUXEDO带的一个SERVER,从一个QUEUE中取数据,然后调用一个���该QUEUE同名的
SERVICE进行处理,并把该SERVICE返回的结果发送到另一个QUEUE中。
tms_qm
是与/Q资源管理器对应的TMS(TRANSACTION MANAGER SERVER),它使对
消息的发送与取出操作可以以事务的方式进行.并使/Q资源管理器可参与全局事务。
/Q有两种使用方式,我们称之为基本模式和转发模式
1. 基本模式:
只用到TMQUEUE,不使用TMQFORWARD,不调用SERVICE对QUEUE中的消息进行处理。流程说明如下(不需要进行4-7的操作,也不需要定义与QUEUE同名的SERVICE):
1. 客户端调用tpenqueue()把数据发送到SERVICE1
2. TMQUEUE接收tpenqueue()发送来的数据,并把他们保存到SERVICE1中
3. 如果以上操作成功,那么tpenqueue()返回成功.
8. 客户端调用tpdequeue(),请求从SERVICE1中取数据
10. TMQUEUE收到该请求,它把相应的消息从SERVICE1中取出,并发送给客户端
2. 转发模式:
用到TMQUEUE和TMQFORWARD,要定义与QUEUE同名的SERVICE并调用SERVICE对QUEUE中的消息进行处理。流程说明如下:
1. 客户端调用tpenqueue()把消息发送到SERVICE1
2. TMQUEUE接收tpenqueue()发送来的消息,并把他们保存到SERVICE1中
3. 如果以上操作成功,那么tpenqueue()返回成功.
4. TMQFORWARD在某个设定的时刻,从SERVICE1中取消息
5. TMQFORWARD用事务模式调用(采用TPCALL())一个名为 " SERVICE1" 的SERVICE,将
消息转发给SERVICE1
6. 名为 "SERVICE1" 的SERVICE 把处理的结果用tprerurn()返回给TPQFORWARD.
7. TPQFORWARD把收到的处理结果发送到REPLYQ
8. 客户端调用tpdequeue(),请求从REPLYQ中取回响应消息
9. TMQUEUE收到该请求,它把相应的消息从queue1中取出,并发送给客户端
10.如果以上操作成功,那么tpdequeue()返回成功
注意: 当一条消息QUEUE中被取出后,在该QUEUE中它将被删除,其他的进程就看不到该消息了.如果有多个进程同时要取该消息,只有最早的那个进程能取到该消息.
和weblogic中类似我们需要对/Q进行管理,具体的管理工作如下:
/Q的管理工作包括:QMCONFIG环境变量的设置,用QMADMIN或图形化管理工具进行QUEUE SPACE,QUEUE的创建及管理,因为/Q也是一种资源管理器,所以要象数据库那样在UBBCONFIG的GROUP种进行配置。在UBBCONFIG中还要配置TMQUEUE,TMQFORWARD这两个SERVER。下面分别进行说明:
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:<device_name:<queue_space_name>"
TUXEDO/QM:为/Q所对应的资源管理器的名称,在$TUXDIR/UDATAOBJ/RM指定
device_name指定存储该QUEUE SPACE的设备(文件)名,queue_space_name为该QUEUE SPACE的名称
在SERVER中要做的配置:
在SERVER这一节中要配置TMQUEUE(必须),TMQFORWARD(可选)这两个SERVER,
QMCONFIG环境变量的设置
QMCONFIG环境变量指定存储QUEUE SPACE的设备(文件)名,以便QMADMIN对它进行管理.它可在命令行中设置,也可在执行QMADMIN时在命令行中指定。
在UNIX下
1. QMCONFIG=/usr/tuxedo/qsample/QUE; export QMCONFIG
2. qmadmin /usr/tuxedo/qsample/QUE
QMADMIN的使用方法
TUXEDO提供一个命令行管理工具QMADMIN,用于对/Q进行管理,QMADMIN类似TMADMIN,QMADMIN常用的命令介绍如下:
qspacecreate: 创建一个新的QUEUE SPACE
qcreate: 在某个QUEUE SPACE 上创建QUEUE
qinfo: 查看某个QUEUE中的信息
qlist: 显示一个QUEUE SPACE所包含的QUEUE,及每个QUEUE中的当前消息个数
qopen: 打开一个QUEUE SPACE
qclose: 关闭一个QUEUE SPACE
说明:
在QMADMIN中输入help可以列出所有的命令,用help命令名可以得到该命令的帮助
如:
> help qinfo
具体的命令参数我就不写了太多了。
现在我们来分析一下tuxedo中自带的qsample例子。它是使用的转发模式。在例子中的文件如下:
runsample是运行和结束整个例子的,包括环境变量的配置,和其他一些配置
setenv是配置环境变量。
crlog是配置日志文件,TMS_QM在队列事务管理时,需要用到日志设备,创建办法也是用nmake命令。
crque是创建消息队列,qsample用到了一个队列空间QSPACE和三个队列STRING、RPLYQ与errque。
makefile是用来编译的文件。
ubb.sample是ubb配置文件。
rmipc是为队列释放IPC资源
对于整个文件的运行过程可以参看runsample,如下:
# (c) 2003 BEA Systems, Inc. All Rights Reserved.
#Copyright (c)
1992 Unix System Laboratories, Inc.
#All rights reserved
#ident "@(#)
samples/atmi/qsample/runsample $Revision: 1.5 $"
#
#set the
environment
. ./setenv
chmod +w ubb.sample
#uname="`uname
-n`"
uname="xianyu"
ed ubb.sample<<!
#g;<uname
-n>;s;;${uname};
g;xianyu;s;;${uname};
g;/usr/local/bean/tuxedo11gR1;s;;${TUXDIR};
g;/usr/local/bean/tuxedo11gR1/samples/atmi/qsample;s;;${APPDIR};
w
q
!
#build
the client and server
make client server
#create the tuxconfig
file
tmloadcf -y ubb.sample
#create the TLOG
./crlog
#create the
QUE
./crque
#boot the application
tmboot -y
#run the
client
client
#shutdown the application
tmshutdown -y
#remove the
client and server
#make clean
#remove the QUE ipc
resources
#./rmipc
#remove all files created
#rm tuxconfig QUE stdout
stderr TLOG ULOG*
对于此例子由于大部分东西已经集成,运行起来相对方便。将ubb.sample,和其他的文件里需要配置的东西补全
直接使用sh runsample即可,结果如下: