消息中間件websphere MQ學習

網文綜合:https://blog.csdn.net/zhifanxu/article/details/51966191
1.爲什麼用MQ:(分佈式系統的一種通訊方式)
消息隊列技術是分佈式應用間交換信息的一種技術。消息隊列可駐留在內存或磁盤上,隊列存儲消息直到它們被應用程序讀走。通過消息隊列,應用程序可獨立地執行–它們不需要知道彼此的位置、或在繼續執行前不需要等待接收程序接收此消息。
在分佈式計算環境中,爲了集成分佈式應用,開發者需要對異構網絡環境下的分佈式應用提供有效的通信手段。爲了管理需要共享的信息,對應用提供公共的信息交換機制是重要的。
設計分佈式應用的方法主要有:遠程過程調用(RPC)–分佈式計算環境(DCE)的基礎標準成分之一;對象事務監控(OTM)–基於CORBA的面向對象工業標準與事務處理(TP)監控技術的組合;消息隊列(MessageQueue)–構造分佈式應用的松耦合方法。

2.市場上有哪些流行的MQ實現:
具體實現有好幾十種,老牌的ActiveMQ、RabbitMQ,炙手可熱的Kafka,阿里巴巴自主開發RocketMQ等。項目裏用的是websphere MQ好像不太流行。。

3.。 MQ的重要概念:
需要知道4個名詞:隊列管理器、隊列、消息、通道。
開發人員,通常更關心消息和隊列。
維護管理人員,通常更關心隊列管理器和通道。
下面分別介紹:
a. 隊列:我們可以簡單地把隊列看成一個容器,用於存放消息。
b. 隊列管理器:隊列管理器構建了獨立的 MQ 的運行環境,它是消息隊列的管理者,用來維護和管理消息隊列。
c. 消息:MQ中的最小對象;默認情況下,消息缺省可以達到 4MB。消息可以分成持久消息和非持久消息。所謂“持久”的 意思,就是在MQ 隊列管理器重啓動後,消息是否仍然能保持。持久的消息寫入或讀出隊列的同時會在 Log 中記錄,所以性能上比非持久消息差不少。
d. 通道:通道則是兩個隊列管理器之間的一種單向的點對點的通信連接, 消息在通道中只能單向流動。隊列管理器之間的通信是通過配置通道來實現 的,通道兩側的隊列管理器對這個通道的相關參數應該能對應起來。在通道上可以配置不同的通信協議,這樣就使得編程接口與通信協議無關。通道兩端的 配置必須匹配,且名字相同,否則無法連通。
e. RUNMQSC:命令行交互界面管理工具;通用的 MQ 對象管理工具,使用 MQSC命令集可以對 MQ 對象進行全方位的管理.
RUNMQSC 運行的命令集稱爲 MQSC (MQ Script Command)";在 RUNMQSC 中大小寫無關,所有的命令會先轉換成全大寫再提交執行。所以如果要 表示大小相關的字串,比如對象名,則用引號將字串包住。
輸入以下命令啓動MQSC命令:runmqsc [queueManagerName]

4.MQ的基本操作:
首先,我們需要創建隊列管理器,用來存放隊列。有了隊列管理器後,就可以創建隊列;隊列創建了,就可以用來放入和取出消息;

5.隊列狀態屬性
屬性 含義 MQSC 參數
隊列名稱(看此隊列的名稱。)直接輸入 MQSC
當前隊列深度(看當前在隊列上的消息數) MQSC CURDEPTH
打開輸入計數 (當前連接至隊列 想從隊列裏面取消息的應用程序數量) MQSC IPPROCS
打開輸出計數 (當前連接至隊列 想往隊列裏面放消息的應用程序數量) MQSC OPPROCS

6.管理工具
IBM MQ Explorer是 IBM MQ 查看工具,能查看各種MQ隊列信息。
很好用,但是2012年以後就沒有更新了
IBM MQ Explore使用說明:
https://www.cnblogs.com/springmonkey/p/8228906.html

7.WebSphere MQ的原理
http://blog.sina.com.cn/s/blog_3d1c58190100ax7i.html
Websphere MQ是IBM的商業通訊中間件(Commercial Messaging Middleware)。Websphere MQ提供一個具有工業標準、安全、可靠的消息傳輸系統。它的功能是控制和管理一個集成的商業應用,使得組成這個商業應用的多個分支程序(模塊)之間通過傳遞消息完成整個工作流程。Websphere MQ基本由一個消息傳輸系統和一個應用程序接口組成,其資源是消息和隊列(Messaging and Queuing)。
消息:消息就是一個信息單元,這個信息單元可以是一個請求(Request message),也可以是一個應答(Reply message),或者是一個報告(Report message)或一份報文(Datagram messge)。一個消息包含兩個因素——消息描述(用於定義諸如消息傳輸目標等)和數據消息(如應用程序數據或數據庫查詢等)。程序之間的通信通過傳遞消息而非直接調用程序。
隊列:一個安全的存儲消息的地方,消息的存儲一般是順序的,隊列是消息分階段地傳送和接收。因爲消息存放在隊列中,所以應用程序可以相互獨立的運行,以不同的速度,在不同的時間,在不同的地點。
消息傳輸系統:用於確保隊列之間的消息提供,包括網絡中不同系統上的遠程隊列之間的消息提供。並保證網絡故障或關閉後的恢復。
應用程序接口:應用程序和消息系統之間通過Websphere MQ API實現的接口Websphere MQ API在所有Websphere MQ平臺上是一致的。API只有14個調用,2個關鍵動詞:發送(PUT)和接收(GET)。
在這裏插入圖片描述
如圖所示:雖然應用程序A和應用程序B運行於同一系統A,它們不需要直接的通訊。應用程序A向隊列1發送一條消息,而當應用程序B需要時就可以得到該消息。
如果消息傳輸的目標改爲在系統B上的應用程序C,這種變化不會對應用程序A產生影響,應用程序A向隊列Q2發送一條消息,系統A的Websphere MQ發現Q2實際上在系統B,它將消息放到本地的一個特殊隊列-傳輸隊列(Transmission Queue)。系統A的Websphere MQ然後建立一條到系統B通訊聯接,傳遞這條消息到系統B,並等待確認。只有Websphere MQ接到系統B成功地收到消息的確認後,才從傳輸隊列中移走消息。如果通訊線路不通,或系統B不在運行,消息會留在傳輸隊列中,直到被成功地傳送到目的地。這是Websphere MQ最基本而最重要的技術—可靠消息傳輸。
事實上,Websphere MQ具有特殊的技術防止消息重複傳送,確保消息一次且僅一次(once-and-only-once)傳遞。

7.IBM MQ 常用命令
http://blog.sina.com.cn/s/blog_3d1c58190100ax7f.html~type=v5_one&label=rela_prevarticle
MQ中有幾個很重要的組件:隊列管理器(QueueManager)、隊列(Queue)和通道(Channel)。其基本的操作方法如下:
創建隊列管理器
crtmqm –q QMgrName
-q是指創建缺省的隊列管理器
刪除隊列管理器
dltmqm QmgrName
啓動隊列管理器
strmqm QmgrName
如果是啓動默認的隊列管理器,可以不帶其名字
停止隊列管理器
endmqm QmgrName 受控停止
endmqm –i QmgrName 立即停止
endmqm –p QmgrName 強制停止
顯示隊列管理器
dspmq –m QmgrName
運行MQSeries命令
runmqsc QmgrName
如果是默認隊列管理器,可以不帶其名字
往隊列中放消息
amqsput QName QmgrName
如果隊列是默認隊列管理器中的隊列,可以不帶其隊列管理器的名字
從隊列中取出消息
amqsget QName QmgrName
如果隊列是默認隊列管理器中的隊列,可以不帶其隊列管理器的名字
啓動通道
runmqchl –c ChlName –m QmgrName
啓動偵聽
runmqlsr –t TYPE –p PORT –m QMgrName
停止偵聽
endmqlsr -m QmgrName
MQSeries命令
定義死信隊列
DEFINE QLOCAL(QNAME) DEFPSIST(YES) REPLACE
設定隊列管理器的死信隊列
ALTER QMGR DEADQ(QNAME)
定義本地隊列
DEFINE QL(QNAME) REPLACE
定義別名隊列
DEFINE QALIAS(QALIASNAME) TARGQ(QNAME)
遠程隊列定義
DEFINE QREMOTE(QRNAME) +
RNAME(AAA) RQMNAME(QMGRNAME) +
XMITQ(QTNAME)
定義模型隊列
DEFINE QMODEL(QNAME) DEFTYPE(TEMPDYN)
定義本地傳輸隊列
DEFINE QLOCAL(QTNAME) USAGE(XMITQ) DEFPSIST(YES) +
INITQ(SYSTEM.CHANNEL.INITQ)+
PROCESS(PROCESSNAME) REPLACE
創建進程定義
DEFINE PROCESS(PRONAME) +
DESCR(‘STRING’)+
APPLTYPE(WINDOWSNT)+
APPLICID(’ runmqchl -c SDR_TEST -m QM_ TEST’)
其中APPLTYPE的值可以是:CICS、UNIX、WINDOWS、WINDOWSNT等
創建發送方通道
DEFINE CHANNEL(SDRNAME) CHLTYPE(SDR)+
CONNAME(‘100.100.100.215(1418)’) XMITQ(QTNAME) REPLACE
其中CHLTYPE可以是:SDR、SVR、RCVR、RQSTR、CLNTCONN、SVRCONN、CLUSSDR和CLUSRCVR。
創建接收方通道
DEFINE CHANNEL(SDR_ TEST) CHLTYPE(RCVR) REPLACE
創建服務器連接通道
DEFINE CHANNEL(SVRCONNNAME) CHLTYPE(SVRCONN) REPLACE
顯示隊列的所有屬性
DISPLAY QUEUE(QNAME) [ALL]
顯示隊列的所選屬性
DISPLAY QUEUE(QNAME) DESCR GET PUT
DISPLAY QUEUE(QNAME)MAXDEPTH CURDEPTH
顯示隊列管理器的所有屬性
DISPLAY QMGR [ALL]
顯示進程定義
DISPLAY PROCESS(PRONAME)
更改屬性
ALTER QMGR DESCR(‘NEW DESCRIPTION’)
ALTER QLOCAL(QNAME) PUT(DISABLED)
ALTER QALIAS(QNAME) TARGQ(TARGQNAME)
刪除隊列
DELETE QLOCAL(QNAME)
DELETE QREMOTE(QRNAME)
清除隊列中的所有消息
CLEAR QLOCAL(QNAME)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章