2017-10-20 165 views
1

我想知道消費消息的最佳實踐。我已經閱讀了MassTransit文檔,並且正在尋找這方面的內容,但是我沒有得出任何結論。如何在Masstransit/RabbitMQ中組織隊列?

我有一個api(託管公交車實例),正在發佈消息。這些消息是多種多樣的,因爲這個API不是微服務(購買,銷售等的消息)。

如何組織我的消費者/隊列?

  1. 一個隊列類型的過程?例如,一個用於購買,另一個用於銷售,這個解決方案可能涉及許多流程,我不確定它是否是一個好的解決方案。如果我想購買不同的隊列,比如purchases.stock,purchases.suppliers等?工藝編號可能會大幅增加。我認爲這對於可伸縮性來說是一個很好的選擇,但管理這麼多的進程可能會很棘手。
  2. 多個進程隊列(按隊列分組隊列)?例如,一個流程有多個消費者消費與購買相關的消息並管理差異隊列,比如purchases.stock,purchases.suppliers ...這個選項對我更​​有意義,但我不確定。

回答

1

關鍵概念是避免爲不同的消息類型共享單個隊列。有一些例外情況,但將每種消息類型保留在單獨的隊列中可防止在某種消息類型支配隊列流量時出現瓶頸。

對於進程,由於MassTransit每個總線實例可以有任意數量的接收端點,因此在單個進程中保持相關的業務功能可以顯着幫助代碼管理和部署。流程邊界可以用於擴展,例如,添加更多的流程/工作人員來處理狀態更新與新訂單(前者可能是消息量的10倍)。

分離的另一個原因是依賴關係,與傳統ERP系統進行通信的消費者與大量綁定或耦合到外部庫/ SDK可能需要單獨的進程,以避免由於某些較舊的庫創建。這些庫可能需要更頻繁的進程重啓等,並且保持它們分開,消除了隨着時間的推移而導致問題的整個消費者的重新啓動的需要。

這些只是一些通用的指導原則,但我們在確定將哪些消費者放入同一過程時始終使用這些指導原則。