TXSeries入门系列文章13

本节中将创建一个region,编译两个程序,并为这两个程序添加PDTD,为region添加XAD来连接MQ服务器,添加TDD记录消息传递的日志。仅使用之前提及的一些简单命令。

1)创建用于测试的region

例如:

cicscp -v create region MQ

2)复制示例代码到regionbin目录下

cp /opt/ibm/cics/examples/RM_support/WMQ/* /var/cics_regions/MQ/bin/

3)程序编译

现在将编译cics_mqput(向队列中放入消息)、cics_mqget(从队列中获取消息)和switch load fileswitch 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 filecc命令 

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_mqputcics_mqgetswitch 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协议的数据库DB2Oracle,和本部分的消息队列中间件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的路径和名称,若只给出名称,则会使用regionbin目录作为默认路径。

XAOpen是指XAOpen字符串或者资源管理器初始化字符串。这个字符串会被传递给switch load file中遵循XA协议的xa_open方法,字符串内容基于特定XA产品而不同。上面提到的XAOpen字符串只用于配置TXSeriesMQ的通信。

例如:

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(监控队列定义)来实现CKTICKTI是一个持续运行的触发器监控程序, 监控被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_mqputcics_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成功,regionconsole.nnnnnnnnnnnn为具体数字)文件里将看到下列信息:

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…

     

如果这文章对你有帮助,请扫左上角微信支付-支付宝,给于打赏,以助博客运营