什麼是訊息佇列

2021-09-06 20:26:35 字數 4067 閱讀 6895

「訊息」是在兩台計算機間傳送的資料單位。訊息能夠很easy,比如僅僅包括文字字串;也能夠更複雜,可能包括嵌入物件。 訊息被傳送到佇列中。「訊息佇列」是在訊息的傳輸過程中儲存訊息的容器。訊息佇列管理器在將訊息從它的源中繼到它的目標時充其中間人。佇列的主要目的是提供路由並保證訊息的傳遞;假設傳送訊息時接收者不可用,訊息佇列會保留訊息,直到能夠成功地傳遞它。 「訊息佇列」是 microsoft 的訊息處理技術,它在不論什麼安裝了 microsoft windows 的計算機組合中,為不論什麼應用程式提供訊息處理和訊息佇列功能,不管這些計算機是否在同乙個網路上或者是否同一時候聯機。 「訊息佇列網路」是能夠相互間來回傳送訊息的不論什麼一組計算機。網路中的不同計算機在確保訊息順利處理的過程中扮演不同的角色。它們中有些提供路由資訊以確定怎樣傳送訊息,有些儲存整個網路的重要資訊,而有些僅僅是傳送和接收訊息。 「訊息佇列」安裝期間,管理員確定哪些server能夠互相通訊,並設定特定server的特殊角色。構成此「訊息佇列」網路的計算機稱為「**」,它們之間通過「**鏈結」相互連線。每乙個**鏈結都有乙個關聯的「開銷」,它由管理員確定,指示了經過此**鏈結傳遞訊息的頻率。 「訊息佇列」管理員還在網路中設定一台或多台作為「路由server」的計算機。路由server檢視各**鏈結的開銷,確定經過多個**傳遞訊息的最快和最有效的方法,以此決定怎樣傳遞訊息。

使用msmq

msmq(microsoft message queue,微軟訊息佇列)是在多個不同的應用之間實現相互通訊的一種非同步傳輸模式,相互通訊的應用能夠分布於同一臺機器上,也能夠分布於相連的網路空間中的任一位置.它的實現原理是:訊息的傳送者把自己想要傳送的資訊放入乙個容器中(我們稱之為message),然後把它儲存至乙個系統公用空間的訊息佇列(message queue)中;本地或者是異地的訊息接收程式再從該佇列中取出發給它的訊息進行處理.

在訊息傳遞機制中,有兩個比較重要的概念.乙個是訊息,乙個是佇列.訊息是由通訊的兩方所須要傳遞的資訊,它能夠是各式各樣的**,如文字.聲音.圖象等等.訊息終於的理解方式,為訊息傳遞的兩方事先商定,這樣做的優點是,一是相當於對資料進行了簡單的加密,二則採用自定義的格式能夠節省通訊的傳遞量.訊息能夠含有傳送與接收者的標識,這樣僅僅有指定的使用者才幹看到僅僅傳遞給他的資訊與返回是否操作成功的回執.訊息也能夠含有時間戳,以便於接收方對某些與時間相關的應用進行處理.訊息還能夠含有到期時間,它表明假設在指定時間內訊息還未到達則作廢,這主要應用與時間性關聯較為緊密的應用.

訊息佇列是傳送與接收訊息的公用儲存空間,它能夠存在於記憶體中或者是物理檔案裡.訊息能夠以兩種方式傳送,即快遞方式(express)與可恢復模式(recoverable),它們的差別在於,快遞方式為了訊息的高速傳遞,把訊息放置於記憶體中,而不放於物理磁碟上,以獲取較高的處理能力;可恢復模式在傳送過程的每一步驟中,都把訊息寫入物理磁碟中,以得到較好的故障恢復能力.訊息佇列能夠放置在傳送方.接收方所在的機器上,也能夠單獨放置在另外一台機器上.正是因為訊息佇列在放置方式上的靈活性,形成了訊息傳送機制的可靠性.當儲存訊息佇列的機器發生問題而又一次啟動以後,以可恢復模式傳送的訊息能夠恢復到故障發生之前的狀態,而以快遞方式傳送的訊息則丟失了.還有一方面,採用訊息傳遞機制,傳送方必要再操心接收方是否啟動.是否發生問題等等非必要因素,僅僅要訊息成功傳送出去,就能夠覺得處理完畢,而實際上對方可能甚至未曾開機,或者實際完畢交易時可能已經是第二天了.

採用msmq帶來的優點是:因為是非同步通訊,不管是傳送方還是接收方都不用等待對方返回成功訊息,就能夠執行餘下的**,因而大大地提高了事物處理的能力;當資訊傳送過程中,資訊傳送機制具有一定功能的故障恢復能力;msmq的訊息傳遞機制使得訊息通訊的兩方具有不同的物理平台成為可能.

在微軟的.net平台上利用其提供的msmq功能,能夠輕鬆建立或者刪除訊息佇列.傳送或者接收訊息.甚至於對訊息佇列進行管理. 在.net產品中,提供了乙個msmq類庫"system.messaging.dll".它提供了兩個類分別對訊息物件與訊息佇列物件進行操作.在可以使用msmq功能之前,你必須確定你的機器上安裝了msmq訊息佇列元件,並確保服務正在執行中.在使用asp.net程式設計時,應在頭部使用:

<%@ assembly name="system.messaging"%> <%@ import namespace="system.messsaging"%>

將msmq類庫引入asp.net檔案

1. 對訊息佇列的建立

dim msgque as messagequeue

msgque=new messagequeue(msgpath)

當中:msgpath能夠為本地私有佇列,如"./myqueue",也能夠為其它機器的公有佇列,如"saidy/777$/myqueue",saidy為還有一機器名.

2. 訊息的傳送

dim msgque as messagequeue

msgque.send(msg)

當中:msg為任一物件.

3. 訊息的接收

訊息的接收又分成同步與非同步方式兩種,同步接收在規定時間內從訊息佇列中取出收到的第一條訊息,當訊息佇列中沒有訊息時,程式處於等待狀態;非同步接收方式則是定義了乙個事件處理函式,當訊息佇列中第乙個訊息到達時馬上觸發該函式. 1) 同步方式

dim msg as message

dim fmt as xmlmessageformatter

fmt= ctype(msgque.formatter,xmlmessageformatter)

fmt.targettypenames = new string()

msg=msgque.receive(new timespan(0,0,3))

首先定義收到訊息應轉換成的格式,然後在指定時間內去接收訊息

2) 非同步方式

dim fmt as xmlmessageformatter

定義接收訊息型別

fmt = ctype(msgque.formatter,xmlmessageformatter)

fmt.targettypenames = new string()

定義訊息處理函式入口

addhandler msgque.receivecompleted, new receivecompletedeventhandler

(addressof onreceivecompleted)

定義訊息處理函式

public shared sub onreceivecompleted(s as object, asyncresult as receiveasynceventargs)

dim msgque as messagequeue = ctype(s,messagequeue)

dim msg as message = msgque.endreceive(asyncresult.asyncresult)

此時msg.body即為所取訊息物件

msgque.beginreceive()

又一次定義非同步接收方式

end sub

啟動非同步接收方式

msgque.beginreceive

訊息佇列配置屬性

關於佇列的屬性

path屬性:它能夠決定引用佇列的三種方式,路徑引用.格式名引用.標識引用

category屬性:標識當前使用的佇列的型別.category是佇列全部者定義的guid值.該guid值能夠有guid生成工具產生或者是使用者自己定義的數字值.guid值不會唯一,這樣才幹夠依據同樣的guid值,把多個訊息佇列劃分為不同的類別(category).

跟傳送資料型別相關的屬性

formatter屬性:決定在乙個佇列中怎樣傳送與接收訊息的順序,以及能夠在乙個訊息中傳送什麼樣的內容.

與佇列互動相關的屬性

denysharereceive屬性:決定同一時間內僅僅有乙個部件可以訪問訊息佇列中的訊息.

canread與canwrite屬性:決定佇列能否夠被讀取或者是寫入.

maximumqueuesize與maximumjournalsize屬性:以千位元組為單位設定乙個佇列(日誌佇列)的訊息最大容納量.一旦接收的訊息到達這個容量,新的訊息將不再被接收.

普通情況下,訊息佇列的最大值為訊息佇列管理員所設定,假設這個值沒有控制的話,那麼預設的訊息佇列最大容量將是無限制的.

usejournalqueue屬性::設定是否將收到的訊息複製到日誌訊息佇列中去.

什麼是訊息佇列?

訊息佇列有無數開源實現,一般沒必要自己實現。zmq也好rabbitmq也好甚至redis也好,找乙個合適的裝上用就行 就好像rdbms nosql一樣 技術都是解決問題的,訊息佇列解決的是將突發大量請求轉換為後端能承受的佇列請求,比如你的伺服器一秒能處理100個訂單,但秒殺活動1秒進來1000個訂單...

什麼是訊息佇列?

訊息佇列,一般我們簡稱mq 也就是messges queue的意思 這個名詞也很貼切它的技術實現,實現起來也就是訊息 佇列。訊息,也就是一般我們業務的資料,理解起來比較簡單。佇列,這就涉及到資料結構了。佇列的資料結構想必不陌生了,它具有先進先出的特點。這樣我們對訊息佇列就有很鮮明的解釋了 把訊息放到...

什麼是訊息佇列?

上一次寫了一篇 那些年,面試官問你的訊息佇列 沒有深入概念,今天總結一下。訊息佇列 也就是mq message queue 是基礎資料結構中 先進先出 的一種資料結構。一般用來解決應用解耦,非同步訊息,流量削鋒等問題,實現高效能,高可用,可伸縮和最終一致性架構。指把要傳輸的資料 訊息 放在佇列中,用...