2009-04-08 47 views
1

有人可以提供一些關於何時使用消息隊列的經驗法則以及他們應該解決哪些實際的實際問題?關於消息/消息隊列的經驗法則

謝謝

+0

也許可以使用以下期刊文章中提供的簡單排隊規則:http://puslit2.petra.ac.id/ejournal/index.php/civ/article/view/18524 – chugeluang 2013-09-30 00:14:35

回答

5

異步消息傳遞允許系統以斷開的方式進行通信。兩個系統都沒有必要同時用於完成工作。

還有其他的好處。消息通常提供(有時是無意的)調節機制。這樣可以防止接收系統在許多請求都同時進入的情況下變得不堪重負。

許多消息傳遞系統還提供持久性和可靠性設施,即使消息傳遞平臺或接收系統崩潰,也能保證消息最終將被傳遞。

消息隊列還提供了一個間接層。將消息放入隊列的系統不一定知道誰(如果有的話)正在接收消息。接收者可以以微妙或激烈的方式改變,而不會影響發送者。這樣的鬆耦合通常是可取的。

許多消息傳遞解決方案也可以參與交易。這確保系統既可以接收消息,也可以更新數據庫作爲響應,並且知道兩者都不成功。如有必要,收到消息可以「回滾」並在發生問題時重試。

1

消息隊列提供可靠的消息。他們確保消息不會完全丟失。它們仍然可能被延遲/發送到死信息隊列等,但它們永遠不會從系統中完全消失 - 即使它始終停留在始發客戶端上,除非它被明確刪除,否則始終會有某個副本存在於某個位置。

消息隊列應該在丟失消息會對業務造成危害和/或導致系統不穩定的情況下使用。使用它們會產生開銷,所以只能在業務需求決定時才實施。

在實施它們的情況下,應該設置某種監視過程來檢查凍結的消息(由於服務停止,消息格式不正確等而無法處理的消息)。 )並適當地處理它們。

+0

可靠的消息傳遞是隻是消息傳遞實現可能提供或不提供的功能。消息的異步性質是其應用程序背後的推動力量。 – topchef 2009-04-08 13:45:25

2

當您需要異步但有保證的方式來處理分層環境中的無狀態,面向服務的請求時。

1

消息隊列對實現負載均衡很有用。例如,服務器收到「作業」消息(訂單,狀態消息...)並將它們分發給所有偵聽客戶端。

消息隊列保證消息將被傳送到一個客戶端。

如果客戶端運行在不同的計算機上,則總負載將分配,並且在需要時將其他客戶端輕鬆地引導到消息負載,客戶端只需連接到隊列並將接收(某些)消息。

編輯:

也是有好處的系統(異步地)之間移動的物體。如果它們以獨立於平臺的格式(JSON,XML)進行序列化,則甚至可以在不同的編程語言之間交換該對象。