消息隊列
什麼是消息隊列?
消息隊列容許應用程序經過相互發送消息進行通訊。當目標程序繁忙或未鏈接時,消息隊列提供臨時消息存儲。
程序源於生活,現實舉例:
人們在食堂排隊等待輪到本身買飯,這個排隊的長度就是消息隊列提供臨時消息存儲.
詳解:
隊列是等待處理的一系列事物,從行的開頭開始,而後按順序,順序處理。消息隊列是應用程序之間發送的消息隊列。它包括等待處理的一系列工做對象。
消息是在發送器和接收器應用程序之間傳輸的數據;它本質上是一個字節數組,頂部有一些標題。消息的示例能夠是告知一個系統開始處理任務的內容,它能夠包含關於完成任務的信息,或者僅僅是純消息。
消息隊列的基本架構很簡單;有一些名爲Producers的客戶端應用程序,它們建立消息並將消息傳遞到消息隊列。另外一個名爲使用者的應用程序鏈接到隊列並獲取要處理的消息。放置在隊列上的消息將被存儲,直到使用者檢索它們。
消息隊列提供異步通訊協議,該協議是將消息放入消息隊列的系統,不須要對繼續處理當即做出響應。電子郵件多是異步通訊的最佳例子。當電子郵件被髮送時,發件人繼續處理其餘事情,而不須要接收者當即做出反應。這種處理消息的方式使生產者與使用者脫鉤,這樣它們就不須要同時與消息隊列交互。
去耦和可擴展性:
解耦描述了一個系統的一個部分在多大程度上依賴於系統的另外一個部分。解耦是將函數分離的過程,使它們更加自成體系.當兩個或多個系統可以在不鏈接的狀況下進行通訊時,就能夠實現解耦系統。這些系統能夠保持徹底自主,不瞭解其餘功能。解耦一般是一個結構良好的計算機系統的標誌,由於它更易於維護,若是解耦系統中的一個進程不能處理隊列中的消息,則其餘消息仍然能夠添加到隊列中,並在系統恢復後進行處理。您還可使用消息隊列來延遲處理--例如,生產者將消息發送到隊列。在指定的時間,使用者啓動並處理隊列中的消息。一個排隊的消息能夠被存儲和轉發,而且消息能夠被從新傳遞,直到它被處理.不是構建一個大的應用程序,而是有利的是,將應用程序的不一樣部分解耦,並使用消息隊列異步地在它們之間進行通訊。這容許應用程序的不一樣部分獨立地發展,以不一樣的語言編寫,和/或由分離的開發團隊維護。消息隊列將使應用程序中的進程彼此獨立和獨立。第一個進程將永遠不須要調用另外一個進程,將通知發佈到另外一個進程,或遵循其餘進程的進程流程。它能夠將消息放入隊列中,而後繼續處理。其餘進程也能夠獨立地處理它們的工做,當它們可以處理它們時,能夠從隊列中獲取消息。這種處理消息的方式建立了一個易於維護和擴展的系統。
消息隊列在什麼場景下使用?-一個簡單的用例:
假設您擁有每秒接收許多請求的Web服務,其中不可能丟失任何請求,而且全部請求都須要由具備高吞吐量的函數來處理。換句話說,web服務老是必須是高度可用的,而且準備接收新的請求而不是被先前接收的請求的處理鎖定。
在這種狀況下,在Web服務和處理服務之間放置一個隊列是理想的。Web服務能夠將「開始處理」消息放在隊列上,而另外一個進程能夠按順序接收和處理消息。這兩個進程彼此解耦,不須要等待。若是您在短期內收到了大量請求,那麼處理系統將可以處理全部這些請求。即便請求數量增長,隊列也將與請求保持一致.而後想象一下,業務和工做量都在增長,系統須要擴大規模。所須要作的就是增長更多的消費者,以便更快地處理隊列。web