2016-07-29 83 views
0

我正在尋找一種管理來自多個發佈者的消息流的方法。Azure服務總線中的發佈者公平排隊

一個人爲的例子是這樣的。

我的每個發佈商都在提交可分解爲可以按任意順序處理的較小組件的作業。每個組件需要幾秒鐘來處理。

發佈者A將作業提交給由1000個較小組件組成的隊列。使用者X訂閱隊列並開始處理隊列消息並將結果發送到結果隊列。

通過這項工作的一半,發佈者B提交了一個包含1000個組件的作業。

我希望消費者X現在在來自發布者A和發佈者B的消息之間進行切換,以便發佈者B在接收結果之前不需要等待第一個作業完成,而發佈者A現在只需接收更慢的結果即可B有工作。 (類似於網絡中的公平排隊)

這應該適合任何數量的發佈者。

如果我隨後擴大消費者,每個消費者應該以相同的方式行事。他們不需要協調他們的行爲來保證公平排隊,只是粗略的近似就可以。

在服務總線中是否有處理這種模式?是否有另一種天青技術我應該使用呢?

+0

最簡單的方法是創建多個訂閱的主題不同的隊列,然後有多個消費者 – Thomas

+0

謝謝@Thomas,我不明白這有什麼幫助。你能進一步解釋嗎? – Sudsy

+1

Servicebus消息被處理爲FIFO。如果你想平行處理它們,最簡單的選擇是創建多個隊列 – Thomas

回答

1

您可以創建一個Topic來發送較小的組件消息。

在該主題上創建多個訂閱。例如2,並配置每個過濾50%的消息。訂閱1將包含從發佈商A信息和訂閱2將包含從發佈服務器B.消息 (here's how

然後,對於每個訂閱創建的讀取器,導致在相同的時間來處理從多個發佈消息的能力,使用多個用戶。

+0

我可以看到如何工作。如果我理解正確,這種方法有一些妥協。 1)消費者需要知道將提前過濾的密鑰。 2)每次添加用戶和消費者以平衡負載時,您需要進行數學計算。 – Sudsy

+0

是的,公平性延伸了訂閱和讀者的數量 – LoekD