這是一個非常簡單的答案,但它給出了一般的想法。
讓我們從電話和電子郵件的角度思考這個問題。假裝電子郵件不存在一分鐘。爲了完成工作,你必須給每個人打電話。當你通過電話與某人溝通時,你需要讓他們在他們的辦公桌前接觸他們(假設他們在工廠,不能聽到他們的手機響了):-)如果你想要的人不是' t在辦公桌前,你一直在等待,直到他們回覆你的電話(或者更有可能,你稍後再打電話給他們)。這與你一樣 - 在有人打電話給你之前,你沒有任何工作要做。如果多人同時打電話,你不知道,因爲你一次只能處理一個人。
但是,如果我們有電子郵件,您可能會將您的請求「排隊」給其他人,以便在方便時回答(但更可能忽略)。如果他們確實忽略了你的電子郵件,你可以隨時重新發送。您不必等待他們在辦公桌前,他們不必等到您關閉電話。工作量增加,事情運行更加順利。作爲額外的好處,你可以將你不想處理的消息轉發給你的peons。
在系統工程中,我們使用術語「緊密耦合」來定義像上述電話場景一樣工作的程序(或部分程序)。他們非常相互依賴,經常在程序的各個部分之間共享實現。在這些程序中,數據按順序處理,每次處理一個。這些系統通常很容易構建,但是需要考慮一些重要的缺陷:(1)更改程序的任何部分可能會導致整個代碼中的級聯更改,這會引入錯誤; (2)系統不具有可擴展性,通常必須隨着需求的增長而被廢棄和重建; (3)系統的所有部分必須同時工作,否則整個系統將無法工作。
基本上,如果程序非常簡單,或者如果有一些專門的理由使用緊密耦合的程序,緊密耦合的程序是很好的。
在現實世界中,事情要複雜得多。程序不能那麼簡單,以緊密耦合的方式開發企業應用程序變成了一場噩夢。因此,我們使用術語「鬆散耦合」來定義由許多小塊組成的大系統。這些作品具有非常明確的界限和功能,因此可以更輕鬆地完成系統更改。這是面向對象設計的本質。消息隊列(如RabbitMQ)允許在各種程序和部分程序之間進行類似電子郵件的通信,從而使工作流程更像人。無論你需要什麼,增加額外的容量然後成爲一個簡單的啓動和額外的計算機的問題。
很顯然,這是一種粗略的簡化,但我認爲它表達了總體思路。構建使用消息隊列的應用程序使您能夠利用雲服務提供商部署大規模可伸縮的應用程序。這裏是一篇文章,談論雲設計: http://blogs.msdn.com/b/silverlining/archive/2011/08/23/designing-and-building-applications-for-the-cloud.aspx