2013-03-03 90 views
3

我正在使用AzureQueue在角色之間進行通信。我的消息如「GoToMaintenanceMode」,「StopSendingEmails」,「DoNotAcceptRequests」等。但是我意識到,當我有多個實例時,由於隊列消息一次只顯示1個實例,它不適用於我的場景。如何將消息發送給所有輔助角色實例?

所以我的問題是旁邊的選項是否有一個優雅的方式來處理這個問題像Role.AllInstances.Run()等?

我使用它現在的方法: 實例偷窺消息,增加了它自己的實例ID的郵件,並將其返回到隊列中,如果它包含不偷看的消息,這是自己的實例ID。

P.S.我不想實現TCP偵聽器,如果有的話就要求本地解決方案。

回答

10

您可以使用Windows Azure服務總線主題/訂閱而不是隊列。它們支持多播(即多個接收器)。

短如何引導可以在這裏

http://www.windowsazure.com/en-us/develop/net/how-to-guides/service-bus-topics/

發現基本上,你的隊列將成爲一個主題所有的情況下,會成爲用戶的話題。

+0

謝謝!這不是我期待的答案,但處理它是個好主意。但是更喜歡更原生的東西,所以如果沒有其他選擇的話,它會標記爲答案。再次感謝您的時間和關注。 – cilerler 2013-03-03 17:52:51

+0

只是好奇「更原生」是什麼意思。您擁有可變數量的實例,並且您想要向其中的所有人廣播一條消息。您有Azure存儲隊列(非最佳),服務總線隊列(帶pub/sub,最佳,Azure的「本機」),tcp端口(非常快速,易於在RoleInstance中枚舉,輕鬆支持,Windows爲「本機」 。我不確定在這一點上你會得到什麼其他答案,除了SQL表或Azure表存儲中的命令行嗎?再次,變量實例計數,所以你必須考慮到這一點。 – 2013-03-03 19:43:28

+0

@DavidMakogon正如我在問題中所述,我正在尋找類似Role.AllInstances.Run的東西,如果有的話。我一定會使用服務總線而不是隊列。謝謝! – cilerler 2013-03-04 02:28:45

0

由於您不想要TCP偵聽器選項或服務總線選項。如何用多個隊列擴展你的想法?實例1將從隊列1中讀取,而實例2將從隊列2中讀取,等等。你需要處理的唯一事情是隊列的數量,同時向所有隊列添加隊列消息。

+0

這也是一個工作,但謝謝你的時間! – cilerler 2013-03-04 01:52:24

+1

http://i.msdn.microsoft.com/dynimg/IC638762.gif – cilerler 2013-03-04 02:22:13

+0

@cilerler與上面解釋的架構完全相同。感謝您的鏈接 – 2013-03-04 05:25:51