WebSphere MQ出口程序編寫和配置1

1 出口程序的概念

使用WebSphere MQ(以下簡稱MQ)做分佈式數據傳輸時,我們需要在兩個隊列管理器之間或者在MQ的客戶端與服務器之間建立通道,MQ的通道分為三大類:消息通道,MQI通道,Cluster通道。其中消息通道用於隊列管理器之間的數據傳輸,它主要有Sender,Receiver, Server,Requester四種類型;MQI通道用於Client與Server端的通訊,它可以認為是一種API通道,使得客戶端能夠通過API編程訪問和使用服務器端的消息隊列資源;Cluster通道是位於同一個隊列管理器群集內部的若干隊列管理器之間相互通訊用的。

為了使用戶在利用MQ進行消息傳輸時增加對消息的客戶化處理以及對通道的控制,MQ提供通道出口(Channel Exit)的解決方案。出口程序在定義通道時指明,並由MCA(消息通道代理)程序調用,目的在於增強通道的處理以及提供安全服務和消息處理服務。

利用出口機制,客戶可將自己的加密、壓縮等計算處理模塊平滑地嵌入到MQ的消息傳輸處理流程中,從而使這些計算處理的算法部分與進行隊列讀寫的應用程序相分離,這樣根據靈活性和擴展性的需要,可以經常改變出口的計算處理算法,而不需修改應用程序。

MQ提供的出口程序類型主要有:安全出口(Security Exit), 發送/接收出口(Send/Receive Exit), 消息出口(Message Exit), 消息重試出口(Message Retry Exit)等。

一般而言,出口程序是成對使用的,譬如在發送端使用了加密出口程序,則在接收端必須使用解密出口程序。這些出口程序的作用分別在於:

    安全出口:主要用於兩個MQSeries系統之間通道啟動時的雙方的身份認證;

    發送和接收出口:可以用來進行數據的加密/解密以及數據的壓縮/解壓縮;

    消息出口:可以用來在消息級實現用戶的特定功能,如數據轉換,加密/解密等。

例如,利用通道出口程序將數字簽名加在通道上的每一條消息上,該數字簽名被接收端通道代理程序接收,進行相關驗證,在消息從發送端到接收端傳輸的過程中,絕不會被更改。WebSphere MQ為用戶提供了一些非常實用的工具:SupportPac軟件包,用戶可以從產品的Internet站點上下載使用,其中的MS0C就是一個如何使用MQ的安全出口實現PKI認證的例子。


2 出口程序的工作機制

2.1 安全出口的工作機制

安全出口主要用於通道兩端的MCA互相連接時,進行對方的安全驗證。它在MCA初始化和終止時被調用。在通道啟動時,MCA程序從啟動會話轉為同步處理,然後轉向數據交換,其中包括安全出口程序,這個相互認證過程必須成功完成之後才能進行消息傳輸。

2.1.1 安全出口認證過程:

安全檢查是一個循環過程,(Caller MCA是指發起連接者,可以是Sender、Server或Requester通道;被發起者稱為Responder MCA,可以是任何種類的通道。),如圖1所示:

在兩個安全出口程序中間需要建立起安全連接,一個在發送端MCA,另一個在接收端MCA。在上面的安全循環中,本地隊列管理器要由遠端隊列管理器鑒別自己,而作為回應,遠端隊列管理器也要由本地隊列管理器鑒別自己。這是一個雙向的過程。

發送端MCA啟動通道後,由接收端MCA創建安全令牌以初始化安全信息,然後發送安全令牌給本地隊列管理器上的MCA,發送端MCA接收到安全令牌後,利用認證機制將該令牌作為入口創建另外的令牌,並將它發送回接收端MCA。接收端MCA檢查第二次收到的令牌,完成相互鑒定。如果以上操作成功,接收者隊列管理器就確認與發送者隊列管理器的通信,即發送端可以向接收端傳輸消息。安全出口成對使用,任何一方都可以終止連接。

2.1.2 安全出口應用場合:

安全出口雖然名為”安全”出口,但它並不僅僅只用於安全目的,也並非所有的與安全有關的功能都必須在這裡實現,用戶完全可以靈活地利用它實現自己需要的功能,例如,在可以免費下載的MQ的SupportPac中,針對MQ for Windows 95/98平台,曾經提供了一個安全出口的例子程序,用於將通道的Connection Name從對方的IP地址改為對方的隊列管理器名。

安全出口在發送端和接收端均可以返回以下幾種結果之一:

    安全認證無誤結束;

    禁止並關閉通道;

    發送安全消息給遠端相應的安全通道;

    發送安全消息,並且要求應答(OS/390平台上使用CICS時,無此支持)

注意:

安全出口通常成對使用。如果定義了通道,必須確認通道兩端具有一致的安全出口程序名。

2.2 消息出口的工作機制

消息出口作用於通道的任何一端,對每一個消息調用一次,即:在消息離開傳輸隊列之後被放入目的隊列之前。消息出口在以下這些情況下被調用:

    MCA初始化和終止時;

    發送MCA執行MQGET調用從傳輸隊列中取出消息後(見圖2);
圖 2

    接收MCA執行MQPUT調用向本地隊列放入消息前(見圖3)。
圖 3

2.2.1 消息出口應用場合:

    消息數據加密:消息出口一般用於消息傳輸前的加密和傳輸後的解密,其中的加/解密算法可以由用戶自行定義。

    消息數據轉換

    日誌

    其它一些應用

消息出口可以返回以下幾種情況之一:

    消息可以被取走(GET出口),消息已經被出口程序正確處理(返回MQXCC_OK);

    被放入隊列中(PUT出口),消息已經被出口程序正確處理(返回MQXCC_OK);

    不能正確處理消息,消息被MCA放入死信隊列。

    關閉通道。

以下文章點擊率最高

Loading…

     

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