訊息佇列

訊息佇列

"訊息佇列"是在訊息的傳輸過程中保存訊息的容器。

基本信息

簡介

訊息佇列訊息佇列
“訊息”是在兩台計算機間傳送的數據單位。訊息可以非常簡單,例如只包含文本字符串;也可以更複雜,可能包含嵌入對象
訊息被傳送到佇列中。“訊息佇列”是在訊息的傳輸過程中保存訊息的容器。訊息佇列管理器在將訊息從它的源中繼到它的目標時充當中間人。佇列的主要目的是提供路由並保證訊息的傳遞;如果傳送訊息時接收者不可用,訊息佇列會保留訊息,直到可以成功地傳遞它。

訊息處理技術

“訊息佇列”是 Microsoft 的訊息處理技術,它在任何安裝 Microsoft Windows 的計算機組合中,為任何應用程式提供訊息處理和訊息佇列功能,無論這些計算機是否在同一個網路上或者是否同時在線上
“訊息佇列網路”是能夠相互間來回傳送訊息的任何一組計算機。網路中的不同計算機在確保訊息順利處理的過程中扮演不同的角色。它們中有些提供路由信息以確定如何傳送訊息,有些保存整個網路的重要信息,而有些只是傳送和接收訊息。
“訊息佇列”安裝期間,管理員確定哪些伺服器可以互相通信,並設定特定伺服器的特殊角色。構成此“訊息佇列”網路的計算機稱為“站點”,它們之間通過“站點連結”相互連線。每個站點連結都有一個關聯的“開銷”,它由管理員確定,指示了經過此站點連結傳遞訊息的頻率。

管理員

“訊息佇列”管理員還在網路中設定一台或多台作為“路由伺服器”的計算機。路由伺服器查看各站點連結的開銷,確定經過多個站點傳遞訊息的最快和最有效的方法,以此決定如何傳遞訊息。
訊息佇列在XP Home(家庭版)中不存在。但是家庭版的XP仍可以訪問網路和組成家庭區域網路。所以根據這一點(等於是微軟Windows官方對XPHome設定)的情況看來,使用nLite將其移除應該沒有問題。但是基於nLite作者在nLite界面中將其標為“紅色”,以nLite作者的博學,我們應該信任他。所以不妨讓它留在我們系統里,頂多是增加一項服務。卻可以感覺到很安然的狀態。

進程間通信

訊息佇列(也叫做報文佇列)能夠克服早期unix通信機制的一些缺點。作為早期unix通信機制之一的信號能夠傳送的信息量有限,後來雖然POSIX 1003.1b在信號的實時性方面作了拓廣,使得信號在傳遞信息量方面有了相當程度的改進,但是信號這種通信方式更像"即時"的通信方式,它要求接受信號的進程在某個時間範圍內對信號做出反應,因此該信號最多在接受信號進程的生命周期內才有意義,信號所傳遞的信息是接近於隨進程持續的概念(process-persistent);管道及有名管道則是典型的隨進程持續IPC,並且,只能傳送無格式的位元組流無疑會給應用程式開發帶來不便,另外,它的緩衝區大小也受到限制。
訊息佇列就是一個訊息的鍊表。可以把訊息看作一個記錄,具有特定的格式以及特定的優先權。對訊息佇列有寫許可權的進程可以向訊息佇列中按照一定的規則添加新訊息;對訊息佇列有讀許可權的進程則可以從訊息佇列中讀走訊息。訊息佇列是隨核心持續的。
目前主要有兩種類型的訊息佇列:POSIX訊息佇列以及系統V訊息佇列,系統V訊息佇列目前被大量使用。考慮到程式的可移植性,新開發的應用程式應儘量使用POSIX訊息佇列。
系統V訊息佇列是隨核心持續的,只有在核心重起或者顯式刪除一個訊息佇列時,該訊息佇列才會真正被刪除。因此系統中記錄訊息佇列的數據結構(struct ipc_ids msg_ids)位於核心中,系統中的所有訊息佇列都可以在結構msg_ids中找到訪問入口。 訊息佇列就是一個訊息的鍊表。每個訊息佇列都有一個佇列頭,用結構struct msg_queue來描述。佇列頭中包含了該訊息佇列的大量信息,包括訊息佇列鍵值、用戶ID、組ID、訊息佇列中訊息數目等等,甚至記錄了最近對訊息佇列讀寫進程的ID。讀者可以訪問這些信息,也可以設定其中的某些信息。

常用軟體

MSMQ

這是微軟的產品里唯一被認為有價值的東西。對客戶來說,如果MSMQ能證明可以應對這種任務,他們將選擇使用它。關鍵是這個東西並不複雜,除了接收和傳送,沒有別的;它有一些硬性限制,比如最大訊息體積是4MB。然而,通過和一些像MassTransit或NServiceBus這樣的軟體的連線,它完全可以解決這些問題。

ActiveMQ

Java世界的中堅力量。它有很長的歷史,而且被廣泛的使用。它還是跨平台的,給那些非微軟平台的產品提供了一個天然的集成接入點。然而,它只有跑過了MSMQ才有可能被考慮。

RabbitMQ

它支持開放的高級訊息佇列協定(AMQP,AdvancedMessageQueuingProtocol),從根本上避免了生產廠商的封閉,使用任何語言的各種客戶都可以從中受益。這種協定提供了相當複雜的訊息傳輸模式,所以基本上不需要MassTransit或NServiceBus的配合。它還具有“企業級”的適應性和穩定性。這些東西對我的客戶來說十分的有吸引力。

ZeroMQ

開發這個產品的公司是AMQP集團的一部分,並且還有一個叫做OpenAMQ的產品。然而,他們卻戲劇性的從AMQP分離的出去,並抱怨說這這個產品迷失了方向、變的越來越複雜。ZeroMQ具有一個獨特的非中間件的模式,也就是說,跟其它幾個接受測試的產品不同,你不需要安裝和運行一個訊息伺服器,或中間件。你只需要簡單的引用ZeroMQ程式庫,可以使用NuGet安裝,然後你就可以愉快的在應用程式之間傳送訊息了。非常有趣的是,他們也同樣使用這方式在任何利用ZeroMQ進行強大的進程內通信的語言裡創建Erlang風格的這種執行角色

相關詞條

相關搜尋

熱門詞條

聯絡我們