開啟主選單

求真百科

消息隊列
圖片來自優酷

消息的傳輸過程中保存消息的容器

「消息隊列」是在消息的傳輸過程中保存消息的容器。 消息隊列技術是分布式應用間交換信息的一種技術。消息隊列可駐留在內存或磁盤上,隊列存儲消息直到它們被應用程序讀走。通過消息隊列,應用程序可獨立地執行--它們不需要知道彼此的位置、或在繼續執行前不需要等待接收程序接收此消息。

目錄

消息簡介

「消息」是在兩台計算機間傳送的數據單位。消息可以非常簡單,例如只包含文本字符串;也可以更複雜,可能包含嵌入對象。

消息被發送到隊列中。「消息隊列」是在消息的傳輸過程中保存消息的容器。消息隊列管理器在將消息從它的源中繼到它的目標時充當中間人。隊列的主要目的是提供路由並保證消息的傳遞;如果發送消息時接收者不可用,消息隊列會保留消息,直到可以成功地傳遞它。

處理技術

「消息隊列」是Microsof的消息處理技術,它在任何安裝 Microsoft Windows 的計算機組合中,為任何應用程序提供消息處理和消息隊列功能,無論這些計算機是否在同一個網絡上或者是否同時聯機。

「消息隊列網絡」是能夠相互間來回發送消息的任何一組計算機。網絡中的不同計算機在確保消息順利處理的過程中扮演不同的角色。它們中有些提供路由信息以確定如何發送消息,有些保存整個網絡的重要信息,而有些只是發送和接收消息。

消息隊列為構造以同步或異步方式實現的分布式應用提供了鬆耦合方法。消息隊列的API調用被嵌入到新的或現存的應用中,通過消息發送到內存或基於磁盤的隊列或從它讀出而提供信息交換。消息隊列可用在應用中以執行多種功能,比如要求服務、交換信息或異步處理等。

「消息隊列」安裝期間,管理員確定哪些服務器可以互相通信,並設置特定服務器的特殊角色。構成此「消息隊列」網絡的計算機稱為「站點」,它們之間通過「站點鏈接」相互連接。每個站點鏈接都有一個關聯的「開銷」,它由管理員確定,指示了經過此站點鏈接傳遞消息的頻率。

進程通信

消息隊列(也叫做報文隊列)能夠克服早期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。讀者可以訪問這些信息,也可以設置其中的某些信息。

管理員

「消息隊列」管理員還在網絡中設置一台或多台作為「路由服務器」的計算機。路由服務器查看各站點鏈接的開銷,確定經過多個站點傳遞消息的最快和最有效的方法,以此決定如何傳遞消息。

消息隊列在XP Home(家庭版)中不存在。但是家庭版的XP仍可以訪問網絡和組成家庭局域網。所以根據這一點(等於是微軟Windows官方對XPHome設置)的情況看來,使用nLite將其移除應該沒有問題。但是基於nLite作者在nLite界面中將其標為「紅色」,以nLite作者的博學,我們應該信任他。所以不妨讓它留在我們系統里,頂多是增加一項服務。卻可以感覺到很安然的狀態。

在分布式計算環境中,為了集成分布式應用,開發者需要對異構網絡環境下的分布式應用提供有效的通信手段。為了管理需要共享的信息,對應用提供公共的信息交換機制是重要的。

視頻

消息隊列的功能介紹

[1]

參考文獻