轉自:http://hi.baidu.com/lubezhang/blog/item/bd308b3b7ecce3ec14cecb4f.htmlhtml
IBM MQ(IBM Message Queue)是IBM的一款商業消息中間產品,適用於分佈式計算環境或異構系統之中。消息隊列技術是分佈式應用間交換信息的一種技術。消息隊列可駐留在內存或磁盤上,隊列存儲消息直到它們被應用程序讀走。經過消息隊列,應用程序可獨立地執行--它們不須要知道彼此的位置、或在繼續執行前不須要等待接收程序接收此消息。
MQ基本概念
一、對列管理器
隊列管理器是MQ系統中最上層的一個概念,由它爲咱們提供基於隊列的消息服務。
二、消息
在MQ中,咱們把應用程序交由MQ傳輸的數據定義爲消息,咱們能夠定義消息的內容並對消息進行廣義的理解,好比:用戶的各類類型的數據文件,某個應用向其它應用發出的處理請求等均可以做爲消息。消息有兩部分組成:消息描述符(Message Discription或Message Header),描述消息的特徵,如:消息的優先級、生命週期、消息Id等;消 息體(Message Body),即用戶數據部分。在MQ中,消息分爲兩種類型,非永久性(non-persistent)消息和永久性(persistent)消息,非永久 性消息是存儲在內存中的,它是爲了提升性能而設計的,當系統掉電或MQ隊列管理器從新啓動時,將不可恢復。當用戶對消息的可靠性要求不高,而側重系統的性 能表現時,能夠採用該種類型的消息,如:當發佈股票信息時,因爲股票信息是不斷更新的,咱們可能每若干秒就會發布一次,新的消息會不斷覆蓋舊的消息。永久 性消息是存儲在硬盤上,而且紀錄數據日誌的,它具備高可靠性,在網絡和系統發生故障等狀況下都能確保消息不丟、不重。
此外,在MQ中,還有邏輯消息和物理消息的概念。利用邏輯消息和物理消息,咱們能夠將大消息進行分段處理,也能夠將若干個自己完整的消息在應用邏輯上歸爲一組進行處理。
三、對列
隊列是消息的安全存放地,隊列存儲消息直到它被應用程序處理。
消息隊列如下述方式工做:
a) 程序A造成對消息隊列系統的調用,此調用告知消息隊列系統,消息準備好了投向程序B;
b) 消息隊列系統發送此消息到程序B駐留處的系統,並將它放到程序B的隊列中;
c) 適當時間後,程序B從它的隊列中讀此消息,並處理此信息。
因爲採用了先進的程序設計思想以及內部工做機制,MQ可以在各類網絡條件下保證消息的可靠傳遞,能夠克服網絡線路質量差或不穩定的現狀,在傳輸過程當中,若是 通訊線路出現故障或遠端的主機發生故障,本地的應用程序都不會受到影響,能夠繼續發送數據,而無需等待網絡故障恢復或遠端主機正常後再從新運行。
在MQ中,隊列分爲不少種類型,其中包括:本地隊列、遠程隊列、模板隊列、動態隊列、別名隊列等。本地隊列又分爲普通本地隊列和傳輸隊列,普通本地隊列是應用程序經過API對其進行讀寫操做的隊列;傳輸隊列能夠理解爲存儲-轉發隊列,好比:咱們將某個消 息交給MQ系統發送到遠程主機,而此時網絡發生故障,MQ將把消息放在傳輸隊列中暫存,當網絡恢復時,再發往遠端目的地。遠程隊列是目的隊列在本地的定義,它相似一個地址指針,指向遠程主機上的某個目的隊列,它僅僅是個定義,不真正佔用磁盤存儲空間。模 板隊列和動態隊列是MQ的一個特點,它的一個典型用途是用做系統的可擴展性考慮。咱們能夠建立一個模板隊列,當從此須要新增隊列時,每打開一個模板隊 列,MQ便會自動生成一個動態隊列,咱們還能夠指定該動態隊列爲臨時隊列或者是永久隊列,若爲臨時隊列咱們能夠在關閉它的同時將它刪除,相反,若爲永久隊 列,咱們能夠將它永久保留,爲我所用。
四、通道
通道是MQ系統中隊列管理器之間傳遞消息的管道,它是創建在物理的網絡鏈接之上的一個邏輯概念,也是MQ產品的精華。在 MQ中,主要有三大類通道類型,即消息通道,MQI通道和Cluster通道。消息通道是用於在MQ的服務器和服務器之間傳輸消息的,須要強調指出的是, 該通道是單向的,它又有發送(sender), 接收(receive), 請求者(requestor), 服務者(server)等不一樣類型,供用戶在不一樣狀況下使用。MQI通道是MQ Client和MQ Server之間通信和傳輸消息用的,與消息通道不一樣,它的傳輸是雙向的。羣集(Cluster)通道是位於同一個MQ 羣集內部的隊列管理器之間通信使用的。
MQ工做原理安全
如圖所示:服務器
首先來看本地通信的狀況,應用程序A和應用程序B運行於同一系統A,它們之間能夠藉助消息隊列技術進行彼此的通信:應用程序A向隊列1發送一條信息,而當應用程序B須要時就能夠獲得該信息。網絡
其 次是遠程通信的狀況,若是信息傳輸的目標改成在系統B上的應用程序C,這種變化不會對應用程序A產生影響,應用程序A向隊列2發送一條信息,系統A的MQ 發現Q2所指向的目的隊列實際上位於系統B,它將信息放到本地的一個特殊隊列-傳輸隊列(Transmission Queue)。咱們創建一條從系統A到系統B的消息通道,消息通道代理將從傳輸隊列中讀取消息,並傳遞這條信息到系統B,而後等待確認。只有MQ接到系統 B成功收到信息的確認以後,它才從傳輸隊列中真正將該信息刪除。若是通信線路不通,或系統B不在運行,信息會留在傳輸隊列中,直到被成功地傳送到目的地。 這是MQ最基本而最重要的技術--確保信息傳輸,而且是一次且僅一次(once-and-only-once)的傳遞。分佈式
MQ提供了用於應用集成的鬆耦合的鏈接方法,由於共享信息的應用不須要知道彼此物理位置(網絡地址);不須要知道彼此間怎樣創建通訊;不須要同時處於運行狀態;不須要在一樣的操做系統或網絡環境下運行。性能
若是文章對你用,請支持萬事如意網址導航。人工智能
再分享一下我老師大神的人工智能教程吧。零基礎!通俗易懂!風趣幽默!還帶黃段子!但願你也加入到咱們人工智能的隊伍中來!https://blog.csdn.net/jiangjunshowspa