2012-04-09 72 views
2

我剛剛開始使用Windows Azure服務總線(主題&隊列),我試圖實現競爭消費者消息傳遞模式。Azure服務總線中的競爭消費者消息傳遞模式

從本質上講,我想有一組消息生產者和一組消息消費者的。一旦生成消息,我想讓第一個可用的消費者處理消息。沒有其他消費者應該收到消息。

有沒有辦法在Azure中做到這一點?

+0

每封郵件的背後是什麼樣的/多少工作?你有什麼時間限制? – 2012-04-09 19:57:25

+0

@Simon理想情況消費者將在消息生成時間的10-30ms內開始處理消息。如果生產者推出消費者,我會增加更多消費者以滿足需求。 – JoeGeeky 2012-04-09 20:40:54

回答

2

那麼你可能不想要話題,而是Brokered Messaging

通過使用消息的標籤和/或內容類型屬性以及PeekLock接收模式,您可以模擬代理消息中的類似主題的功能。

+0

這是否意味着我只是創建一個隊列;根據需要設置ReceiveMode;並將所有消費者綁定到同一隊列?那是對的嗎? – JoeGeeky 2012-04-09 21:03:41

+1

是的,這是正確的。如果您使用PeekLock方法,那麼您將能夠檢查Label或ContentType以查看它是否是接收方想要響應的消息類型。如果是,則只需在消息上調用.Complete(),如果不是,則調用.Abandon()。一旦放棄,並且短鎖過期,隊列的其他使用者可以處理該消息。如果完成,它會永久地從隊列中刪除。 – Zack 2012-04-10 00:28:03

1

主題是中介消息的一個功能,但是是一對多的「發佈/訂閱」模式。隊列是一對一的消息通信。所以是的,這聽起來像你應該簡單地使用隊列。另見http://msdn.microsoft.com/en-us/library/hh689723(VS.103).aspx

+0

隊列是一對一的消息通信,因爲消息將被傳遞給一個接收者。但是,沒有什麼能夠阻止您讓多個接收器同時在同一隊列中偵聽,以啓用您提到的場景。 – 2012-05-10 21:10:33

3

簡單。只需讓兩個(或更多)接收器同時從單個隊列中接收,即可完成。任何檢索到的消息都只能到達其中一個接收者,因爲在發送消息時,消息日誌上的光標會提前。競爭的消費者是網絡排隊的固有能力,所以沒有什麼特別需要。

如果您需要相反的信息 - 每條消息都發送給每個消費者 - 您爲每個消費者制定一個標識符,這將爲您提供一個獨立於其他接收者的獨立消息日誌。對於踢球,你顯然也可以讓競爭的消費者進行訂閱。

Clemens

+0

不確定我看到你如何讓訂閱上的競爭消費者。這是使用過濾器來完成的嗎?你能解釋一點還是指向更多信息? – 2013-01-13 15:17:03