本節中將創建一個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…