/*轉載請保留版權:作者:雷霖 QQ:64607646
E-Mail:[email protected]
Blog:blog.csdn.net/rubi
*/
1, MQ編程概述<?xml:namespace prefix = o />
IBM Websphere MQ編程主要有兩部分:一是MQ系統管理編程;一是MQ應用開發編程。
MQ系統管理編程:
所謂的MQ系統管理編程是指使用MQ提供的編程接口,編制特定的應用程序,來進行對MQ各種對象的監控和管理,如:查詢通道的狀態、隊列的深度等運行時狀態,查詢隊列管理器的屬性,隊列的屬性或通道的屬性等靜態參數;以及對MQ進行各種操作,如:啓動/停止通道,創建/刪除各種對象,修改各種對象的屬性等。
實際上,MQ爲我們提供了多種系統管理的手段,其中包括:
· 利用MQ的圖形管理界面進行操作、監控和管理:MQ資源管理器爲用戶提供了良好的管理界面,從而方便用戶對中間件系統的配置和管理工作,通過MQ資源管理器,用戶可以定義、修改、刪除中間件的各種資源、對象,察看各種對象的屬性,監控各種對象的運行狀態;
· 利用MQSC命令,通過命令行的方式對MQ進行操作、監控和管理,尤其值得一提的是MQSC命令在各個平臺上都是相同的,在一個有若干平臺共存的系統中大大地方便和簡化了系統管理的工作。
· 通過特定的系統管理工具進行監控和管理,MQ不僅自身提供了GUI和文本化監控工具來監測和顯示對象的狀態,並且能夠利用各類系統管理軟件對整個網絡運行狀況實施監控;如Tivoli Manager for MQ就是一個功能強大的綜合管理工具:它爲控制消息和應用程序框架提供了一個集中管理平臺。它捕獲和顯示MQ的事件,並能發現新的隊列管理器以及相應的對象,這些對象可以通過中央控制檯進行定義和配置。除此之外,許多第三方廠家也提供有類似的管理工具。
除了以上這三種管理手段之外,MQ還提供了系統管理的編程接口,通過該接口用戶可以編寫應用程序從而進行自動化的實時監控及管理。MQ的系統管理接口有兩種,即Programmable Command Format(可編程命令格式,簡稱PCF)和MQ Administration Interface(MQ管理接口,簡稱MQAI)。
MQ應用開發編程:
MQ的應用開發編程主要是指使用MQI,AMI,ActiveX編程接口來進行消息的發送和接受以及相關的應用開發的工作。
MQI即Message Queue Interface:
它提供的基礎而豐富的編程接口,而且也提供了最全面的操作組。。它的使用比較廣泛,支持大部分平臺和程序語言。
比如:操作系統支持AS/400、SunOS、AIX、Windows等,編程語言支持C、C++、VB、PL/I、COBOL、RPG、Delphi等。
MQI可以用來處理:
l 連接和斷開連接一個隊列管理器
l 打開和關閉隊列對象
l 發送、瀏覽和獲得消息
l 查詢和設置對象屬性
l 事務處理管理
l 消息分組
AMI即Application Message Interface:
其可向程序員提供一種可以用於處理隊列管理器對象非常簡單的接口。利用AMI,程序員不必深入瞭解所有MQI調用,他們只要專注於應用程序的商業邏輯即可。這就意味着在編程時出現的錯誤更少,具有更高的處理業務及技術改變的靈活性。AMI減少了編寫新應用程序所需的代碼數量。
可採用以下方式發送和接收消息AMI:
l 發送-遺忘,不需要回復
l 分配表,將消息發送到多個目的地
l 請求/回覆,發送消息的應用程序需要請求消息的回覆
l 發佈/預訂,由代理管理消息的分配
2, MQ Delphi開發
由於網上關於MQ的開發資料比較少,在最近的一個項目中,有人需要用MQ來做開發,由於多MQ的編程不是很瞭解,所以不知道Delphi和MQ之間是如何關聯的。
在MQ的編程模式中,目前我查證的資料中,只有MQI是支持Delphi開發的,另外由於Delphi的第三方組件也比較多,美國有一家公司提供了一個Delphi for MQ的組件,使用起來非常簡單,可惜該組件需要收費。
Delphi採用了MQI接口,官方也提供了文檔指導
http://www-1.ibm.com/support/docview.wss?uid=swg24007060,文檔說明了Delphi MQI的API接口和C的類似,官方的編程MQI編程指導手冊對於Delphi同樣也很適用。在C語言中使用了指針並且使用了另外一種定義字符串長度的方式,就是在結尾處用 #0做標記;在Pascal中,@操作符被用來傳遞指針的值。
3, 實例
MQI的編程用的最多的主要是13個常見函數的調用:
MQCONN
MQCONNX
MQDISC
MQOPEN
MQCLOSE
MQPUT1
MQPUT
MQGET
MQINQ
MQSET
MQBEGIN
MQCMIT
MQBACK
1 MQCONN演示
今天展示的一個實例就是演示成功的打開對隊列管理器進行連接,並學習一些相關的概念。
系統環境:Win2000 Pro + SP4, MQ5.3,Delphi7
Delphi中需要創建一個窗體,一個Memo,一個Button
procedure TForm1.btnCoonClick(Sender: TObject);
var
Hconn : MQHCONN; //連接句柄
CompCode, Reason : MQLONG; //完成代碼,原因代碼
QMgrName : string; //隊列管理器的名字,這裏沒有用MQ的自定義類型變量
begin
QMgrName := 'DMQ';//
MQCONN ( PChar(QMgrName),
// pchar相當於C裏面的char *,以#0結尾,但在使用中不必爲它分配內存
HConn,
Compcode,
Reason);
{CompCode有四種狀態:
MQCC_WARNING = 1;
MQCC_FAILED = 2;
MQCC_UNKNOWN = -1;
if CompCode = MQCC_FAILED then
begin
Memo1.Lines.Add('連接失敗');
Memo1.Lines.Add('連接的隊列管理器的名字是:'+QMgrname);
Memo1.Lines.Add(IntToStr(Reason));
end;
if CompCode = MQCC_WARNING then
begin
Memo1.Lines.Add('警告');
end;
if CompCode = MQCC_OK then
Memo1.Lines.Add('連接成功');
end;
看看,其實很簡單吧?下次我們在研究其他的函數,來進行MQ的消息發送和獲得的演示。