TXSeries入門系列文章12

所以在本部分,將會向用戶介紹如何配置TXSeriesMQ遵循XA標準通信的指令,並編譯示常式序進行測試。

參閱:

 

1. XA簡介

交易管理器(TXSeries)如何與不同的資源管理器(包括MQDB2Oracle)通信呢?XA作為被X/Open組織定義的規範,描述了在交易管理器和一個或多個資源管理器之間進行交易協調、委託和恢復的協議。它描述了資源管理器必須做什麼來支持交易訪問。

2. 準備

本部分將聚焦於如何配置TXSeriesMQ的指令,並編譯兩個示常式序”cics_mqput“和”cics_mqget“來向隊列中放入消息,然後從隊列中讀取消息。關於MQ APIMQ命令與選項的細節信息,可以參閱MQ Knowledge Center——那不是本部分的重點。

注意第三節第三步,第四節第七步和第五節第二步,不同平台的指令間會有差異——更多的細節信息將在稍後提及。

在配置TXSeriesMQ之前,確保已經在客戶端和伺服器都安裝了MQ。本部分伺服器和客戶端的地址如下:

伺服器地址:9.119.154.229

客戶端地址:9.119.154.34

3. 伺服器配置

首先,需要創建一個隊列管理器來管理隊列,隊列是消息的容器。

1)創建隊列管理器

語法

crtmqm <queue manager name>

可以命名自己的隊列管理器。

例如:crtmqm QUE1

參閱:

 

2)啟動隊列管理器

語法

strmqm <queue manager name>

例如:strmqm QUE1

參閱:

 

現在就可以從TXSeries提供的示例文件中添加隊列管理器對象(例如queueprocess)了,這個示例文件位於”<CICS INSTALL DIR>/cics/examples/RM_support/WMQ“目錄下,名為”cics_mqsamp.mqsc“。將其從客戶端機器複製到伺服器機器。

3)創建隊列管理器對象

語法

runmqsc <queue manager name> < <path of “cics_mqsamp.mqsc” file>

例如:runmqsc QUE1 < cics_mqsamp.mqsc

這條命令用於向隊列管理器發布MQSC命令。MQSC命令可以運行管理任務。例如,可以定義、修改和刪除本地隊列(local queue)對象。在”cics_mqsamp.mqsc“文件中定義了一個從”cics_mqput“接收消息的名為CICS.LOCAL.QUEUE的本地隊列 。在這個隊列的定義中,有個TRIGGER參數,它可以指定是否傳遞消息到一個被INITQ指定的初始化隊列(initiation queue),並觸發一個被PROCESS指定的應用程序(Linux不支持這個觸發工作)。初始化隊列和PROCESS的定義在後續的語句中。

在我們的示例中,每次CICS.LOCAL.QUEUE接收到被應用程序”cics_mqput(交易idMPUT)”發送的一條消息,會將這條消息傳遞到CICS.TRIG.QUEUE,然後應用程序”cics_mqget(交易idMGET)”會從初始化隊列獲取消息。如果是在AIX系統中,交易”MGET“將會自動被觸發來讀取消息。

參閱:

關於runmqsc

 

關於隊列定義和參數:

 

4)在伺服器上創建一個本地用戶(可選)

為了獲得連接伺服器的許可權,應該在mqm組創建一個用戶,或者直接使用mqm用戶。客戶端機器將使用這個本地用戶訪問伺服器。使用下面的命令來創建一個屬於mqm組的用戶:

語法

useradd -g mqm <local user id>

例如:useradd -g mqm test1

5)運行MQSC命令

除了像步驟3那樣通過一個文件來運行MQSC外,也可以在指定隊列管理器上使用”runmqsc“來直接運行鍵入的MQSC命令。

語法

runmqsc <queue manager name>

從步驟6到步驟8,將通過配置映射(mapping)的方式使客戶端能夠訪問伺服器。

6)映射用戶id或客戶端地址到伺服器本地用戶id

在配置映射之前,客戶端沒有許可權通過XA協議連接伺服器——伺服器不信任未知的地址和用戶。有兩種方式可以使伺服器識別客戶端。一種是將客戶端機器的地址映射到伺服器上的本地用戶(步驟4配置過的)或者用戶mqm。另一種是將客戶端cics組中的用戶映射到伺服器本地用戶。在本例中,使用用戶cics

用戶可以隨意選擇哪種方式。

a.地址映射

語法

SET CHLAUTH(SYSTEM.DEF.SVRCONN) TYPE(ADDRESSMAP)

ADDRESS(‘<client ip>’)

USERSRC(MAP) MCAUSER(‘<server local user id>’) ACTION(ADD)

這條命令會添加一條在channel SYSTEM.DEF.SVRCONN上將客戶端ip地址映射到伺服器本地用戶的認證記錄。這個channel是自動提供的,但是不推薦使用這個channel——此處僅僅為了方便。

例如:

SET CHLAUTH(SYSTEM.DEF.SVRCONN) TYPE(ADDRESSMAP)

ADDRESS(‘9.119.154.34’)

USERSRC(MAP) MCAUSER(‘test1’) ACTION(ADD)

b.用戶映射

語法

SET CHLAUTH(SYSTEM.DEF.SVRCONN) TYPE(USERMAP) CLNTUSER(‘<client user id>’) USERSRC(MAP) MCAUSER(‘<server local user id>’) ACTION(ADD)

這條命令會添加一條在channel SYSTEM.DEF.SVRCONN上將客戶端用戶映射到伺服器本地用戶的認證記錄。

例如:

SET CHLAUTH(SYSTEM.DEF.SVRCONN) TYPE(USERMAP) CLNTUSER(‘cics’) USERSRC(MAP) MCAUSER(‘test1’) ACTION(ADD)

參閱:

關於channel

 

關於SET CHLAUTH

 

7)添加一條不阻塞任何用戶的認證記錄

語法

SET CHLAUTH(SYSTEM.DEF.SVRCONN) TYPE(BLOCKUSER) USERLIST(‘nobody’)

這條命令可以保證沒有用戶會被阻塞。

8)關閉應用程序連接隊列管理器的用戶名和密碼認證

在完成本步驟前,隊列管理器將檢查應用程序是否有許可權請求連接。現在將關閉這個功能。

首先,修改客戶端程序的認證要求為”none“。

ALTER AUTHINFO(SYSTEM.DEFAULT.AUTHINFO.IDPWOS) AUTHTYPE(IDPWOS)

CHCKCLNT(NONE)

然後,在修改後更新security

REFRESH SECURITY TYPE(CONNAUTH)

到此已經完成了所有的MQSC命令,輸入”END“退出。

參閱:

關於ALTER AUTHINFO

 

關於REFRESH SECURITY

 

9)啟動MQ監聽器

運行一個監聽器進程來監聽多種通信協議上的遠程請求。

語法

runmqlsr -m <queue manager name> -t tcp -p <port number> &

埠號必須沒有被佔用,可能需要關閉防火牆,或打開剛剛指定的埠。

例如:

runmqlsr -m QUE1 -t tcp -p 54321 &

參閱:

 

現在已經完成了所有的伺服器端配置,下面轉向客戶端配置。

4. 客戶端配置

以下文章點擊率最高

Loading…

     

如果這文章對你有幫助,請掃左上角微信支付-支付寶,給於打賞,以助博客運營