2013-04-15 28 views
5

我已經在我的課中學習了消息隊列系統,但是我仍然不明白這些消息隊列系統如何在實時場景中工作?有沒有任何教程可以幫助我獲得完整的圖片? 有人能解釋我這些系統是如何工作的嗎?Message Queue系統如何工作?

+1

[wikipedia文章](http://en.wikipedia.org/wiki/Message_queue)是一個很好的開始。 –

回答

10

舉例:我的線程或進程可以向您的消息隊列發送消息,併發送消息,我的代碼繼續執行其他操作。您的代碼在接近它時從消息隊列中讀取下一條消息,然後決定如何處理該消息。消息隊列避免需要在兩個線程或進程之間共享關鍵部分或互斥體。底層消息隊列層本身負責確保消息進入隊列,而不會影響隊列完整性的競爭條件。

消息隊列可用於單向和雙向異步消息傳遞。對於單向使用,我的線程可以使用它來讓線程評估我線程中的關鍵事件,而不會從線程返回確認。對於雙向使用,在我的線程向您的線程發送消息後,您的線程可能需要通過我的消息隊列將數據發回給我的線程。

消息隊列層使用較低級別的同步方案來確保沒有兩個寫入隊列的隊列可以同時寫入。它確保對隊列的所有寫入都是原子的。它還確保隊列的讀者不能從隊列中讀取部分寫入的消息。

大多數消息隊列API還支持根據您指定的過濾器從隊列中讀取消息。舉例來說,您認爲來自時間關鍵型線程的消息對其他消息更重要。您可以在每次檢查隊列中的消息時,首先檢查關鍵線程中的消息,並首先處理這些消息。如果沒有找到來自關鍵線程的更多消息,您的線程將繼續處理剩餘的消息。

A C tutorial of the UNIX message queues

2

這是一個複雜的話題,但簡單地說:

消息隊列是的最好途徑之一,如果不是最好的,以 實現分佈式系統。

現在你可能會問,什麼是分佈式系統?它是一個跨越多臺機器,客戶機或節點的集成系統,它們以不中斷的方式並行執行其任務。分佈式系統應該足夠強壯,可以在一個或多個節點出現故障,停止工作,滯後或停機維護時繼續運行。

那麼你可能會問,什麼是消息隊列?它是一種面向消息的中間件,它通過使用異步消息來實現分佈式系統的開發,用於通過網絡進行節點間通信。

最後你可能會問,這有什麼好處?這對於實現具有許多需要實時監控和實時反應能力的稱爲節點的移動部件的應用是很好的。總而言之,它們提供了:並行性(節點可以真正並行運行),緊密集成(所有節點以相同順序看到相同的消息),解耦(節點可以獨立演化),故障轉移/冗餘(當節點失敗時,另一個可以運行和建立狀態立即接管),可伸縮性/負載平衡(只需添加更多節點),彈性(節點可以在活動高峯期間滯後而不會影響整個系統)和彈性(節點可以失敗/停止工作,整個系統下降)。

檢查this article詳細討論消息隊列基礎結構。