本节中将创建一个region,编译两个程序,并为这两个程序添加PD和TD,为region添加XAD来连接MQ服务器,添加TDD记录消息传递的日志。仅使用之前提及的一些简单命令。
(1)创建用于测试的region
例如:
cicscp -v create region MQ
(2)复制示例代码到region的bin目录下
cp /opt/ibm/cics/examples/RM_support/WMQ/* /var/cics_regions/MQ/bin/
(3)程序编译
现在将编译cics_mqput(向队列中放入消息)、cics_mqget(从队列中获取消息)和switch load file。switch load file是一个共享库,被WebSphere MQ应用程序和队列管理器装载。它的目的是简化数据库客户端共享库的装载,并返回指向XA函数的指针。
首先,用户根据自己的环境修改makefile “cics_mq_sample.mk“。
MQM_LDLIBS=-L/opt/mqm/lib/libmqm.so
MQM_SWITCHLOAD_LDLIBS=-lmqmcics -lmqmxa -lmqz -lmqmcs –lmqmzse
然后修改编译switch load file的cc命令 。
cc -m32 -u appc_c_version -fPIC -shared $(MQM_ROOT)/samp/amqzscix.c -I/usr/include $(CICS_CCFLAGS) $(MQM_CCFLAGS) -o amqzscix $(CICS_ROOT)
/lib/regxa_swxa.o $(MQM_LDFLAGS) $(CICS_LDFLAGS) -lc -lnsl -ldl $(MQM_SWITCHLOAD_LDLIBS)
最后输入下列命令来编译cics_mqput、cics_mqget和switch load file:
make -f cics_mq_sample.mk
除了自己编译switch load file外,用户还可以使用MQ提供的”/opt/mqm/lib/amqczsc“。
参阅:
关于switch load file:
(4)向region中添加PD
例如:
cicsadd -c pd -r MQ MQPUT PathName=cics_mqput
cicsadd -c pd -r MQ MQGET PathName=cics_mqget
(5)向region中添加TD
例如:
cicsadd -c td -r MQ MPUT ProgName=MQPUT
cicsadd -c td -r MQ MGET ProgName=MQGET
(6)向region中添加XAD
XAD中保存着TXSeries到关系型数据库或MQ等交易型产品所需的连接信息。这些产品包括遵循XA协议的数据库DB2、Oracle,和本部分的消息队列中间件MQ。
语法
cicsadd -c xad -r <region name> MQXA XAOpen=
“channel=SYSTEM.DEF.SVRCONN,trptype=tcp,conname=<ip address of server>
(<listener port>),qmname=<queue manager name>” SwitchLoadFile=<switch load file path>
选项
<listner port> : 第3节步骤9使用的端口号。
<queue manager name> : 第3节步骤1创建的队列管理器。
<switch load file path> : switch load file的路径和名称,若只给出名称,则会使用region的bin目录作为默认路径。
XAOpen是指XAOpen字符串或者资源管理器初始化字符串。这个字符串会被传递给switch load file中遵循XA协议的xa_open方法,字符串内容基于特定XA产品而不同。上面提到的XAOpen字符串只用于配置TXSeries与MQ的通信。
例如:
cicsadd -c xad -r MQ MQXA XAOpen=”channel=SYSTEM.DEF.SVRCONN,
trptype=tcp,conname=9.119.154.229(54321),qmname=QUE1″ SwitchLoadFile=amqzscix
参阅:
关于XAD:
(7)添加MQD
第3节步骤3提到,MGET可以被自动触发从而在初始队列中检索消息。为了使用这个功能,还需要添加MQD(监控队列定义)来实现CKTI。CKTI是一个持续运行的触发器监控程序, 监控被INITQ指定的初始化队列。当一个触发消息到达初始化队列时,CKTI将检索消息并启动PROCESS指定的关联应用。所以当MPUT执行时MGET会被触发。
语法
cicsadd -c mqd -r <region name> <MQD entry name> MQMgrName=<queue manager name>
MQInitiationQueName=<initiation queue name> MonitorTrigger=yes AutoStart=yes
例如:
cicsadd -c mqd -r MQ QM MQMgrName=QUE1 MQInitiationQueName=
CICS.TRIG.QUEUE MonitorTrigger=yes AutoStart=yes
参阅:
添加一个extrapartition TDQ用来记录放入队列中和从队列中获取的消息的日志。在程序中执行EXEC CICS WRITEQ TD命令时,所有的日志消息将被写入到指定的文件中。
例如:
cicsadd -c tdd -r MQ MQLG RSLKey=public DestType=extrapartition ExtrapartitionFile=MQSAMP.LOG RecordType=line_oriented
例子中所展示的日志文件将位于”/var/cics_regions/MQ/data/“目录下,名称是”MQSAMP.LOG“。
(9)修改region的环境变量
cics_mqput和cics_mqget程序将使用要添加的环境变量,用来获取正确的队列管理器名称、队列名称和连接类型。如果将这些变量放入region的环境变量文件(region bin目录下的environment),则它们仅在指定region中生效。
例如:
vi /var/cics_regions/MQ/environment
向文件中添加以下环境变量:
CICS_MQ_QMGR_NAME=QUE1
CICS_MQ_INIT_QUEUE=CICS.TRIG.QUEUE
CICS_MQ_QUEUE_NAME=CICS.LOCAL.QUEUE
ENV_MQ_SAMPLE_TYPE=XA
现在所有的客户端机器配置已经完成。
5. 测试连接和应用程序
(1)冷启动region
例如:
cicscp -v start region MQ StartType=cold
如果使用XA方式连接MQ成功,region中console.nnnnnn(nnnnnn为具体数字)文件里将看到下列信息:
ERZ080088I/0801 11/12/14 04:01:59.903859000 MQ 18487/0001 : XA OPEN submitted for Server 104 connected to ‘MQSeries_XA_RMI’ using XA_OPEN string
‘channel=CHAN1,trptype=tcp,conname=9.119.154.229(54321),qmname=QUE1’
ERZ080006I/0801 11/12/14 04:01:59.956353000 MQ 18487/0001 : XA_OPEN succeeded:
Application Server 104 connected to ‘MQSeries_XA_RMI’ using XA_OPEN string
‘channel=CHAN1,trptype=tcp,conname=9.119.154.229(54321),qmname=QUE1’
ERZ080089I/0801 11/12/14 04:01:59.956455000 MQ 18487/0001 : XA OPEN completed for Server 104 connected to ‘MQSeries_XA_RMI’ using XA_OPEN string
‘channel=CHAN1,trptype=tcp,conname=9.119.154.229(54321),qmname=QUE1’
队列服务器的文件”/var/mqm/qmgrs/<queue manager name>/errors/AMQERR**.LOG“中没有错误消息。
(2)测试交易
在Linux平台上,例如:
cicslterm -r MQ
Enter the transaction id:MPUT
Enter the transaction id:MGET
在AIX平台上,例如:
cicslterm -r MQ
Enter the transaction id:MPUT
查看”/var/cics_regions/MQ/data/MQSAMP.LOG“文件中的内容。
如果一切正确,将会看到下列日志:
Starting MQPUT Sample Transaction
Connecting to Queue Manager …
Connected to queue manager successfully.
Opening Queue …
Opened queue successfully.
Putting a message to queue …
Message was put successfully.
Closing the queue …
Closed queue successfully.
Starting MQGET Sample Transaction …
Connecting to Queue Manager …
Connected to queue manager successfully.
Opening Queue …
Opened queue successfully.
Getting a message from queue …
Received message(s):
Message: <Sample message put by MPUT transaction>
Closing the queue …
以下文章点击率最高
Loading…