2013-03-11 72 views
2

我想創建一個Azure應用程序,其執行以下操作:Windows Azure的跨角色通信

  • 用戶呈現一個MVC 4網站(Web角色),顯示命令的列表。
  • 當用戶選擇一個命令時,它會廣播給所有的輔助角色。
  • 輔助角色處理任務,存儲結果,並通知Web角色
  • Web角色顯示工作者角色

的組合結果從我一直在讀,似乎有這樣做的兩種方式這是:Windows Azure服務總線或使用隊列。每個輔助角色還將結果存儲在數據庫中。

服務總線似乎更適合它的發佈/訂閱模式,所以所有的工作角色都會得到相同的命令並且大致同時進行。隊列似乎更容易使用。

服務總線在開發時可以在本地與仿真器一起使用嗎?我正在使用免費試用版,無法在應用程序不斷髮展的情況下繼續保持應用程序。另外,在使用隊列時,如何通知Web角色處理完成?

+0

我意識到這是一個老問題,但我很好奇爲什麼你有多個工作角色都回應相同的消息?他們每個人都在做不同的任務嗎(基於這個信息)? – 2014-01-31 09:52:23

+0

我正在嘗試創建一個應用程序,該應用程序在現有的Web應用程序上生成大量負載。所以我使用工作角色發送同步http請求,並使用web角色啓動負載測試 – Matt 2014-01-31 13:16:17

回答

5

我同意。 ServiceBus是此消息傳遞要求的更好選擇。你可以通過一些努力,對隊列做同樣的事情。但是,你會寫很多代碼來實現ServiceBus已經給你的東西。

ServiceBus沒有像Azure Strorage服務(隊列/表/ blob)那樣的本地模擬器。但是,在開發環境中本地運行時,仍可以使用ServiceBus在角色之間進行消息傳遞。

至於最後一個關於通知web角色處理完成的問題,有幾種方法可以到這裏。只是一些想法(不是詳盡的列表)...

  1. 表存儲其中Web角色可以定期檢查工作單元的狀態。
  2. 另一個ServiceBus已完成工作的隊列/主題。內部終結點。您必須具有邏輯才能知道它是否只是來自輔助角色N的更新,或者是否指示了所有輔助角色的完成工作單元。
+0

感謝您的輸入。我嘗試在一個小樣本項目中使用服務總線,它工作!再次感謝:) – Matt 2013-03-11 18:27:10

3

我同意裏克的答案,但也將增加以下幾點思考:

如果選擇則服務總線主題方法,因爲每個工人的角色上線時,就需要生成一個訂閱話題。當一位工作人員出現故障並被回收時,您需要考慮訂閱維護,或者爲什麼訂閱可能在那裏的任何原因。

講述所有工作人員完成的網絡角色很有意思。瑞克提供的選擇是好的,但是你需要在這裏考慮一些事情。這意味着網絡角色需要知道有多少員工在外,或者需要其他機制來決定何時所有人都完成了報告。您可能會遇到五個工作角色接收消息並開始工作的情況,然後其中一個角色開始反覆失敗處理。其他四人報告完成,但現在網絡角色正在等待第五。你等待答覆多久了?你能繼續嗎?如果你只是告訴系統縮小規模,而網絡角色認爲有5個,現在只有4個。這些是你需要考慮的事情,它們都取決於你的要求。

+0

感謝這些有用的建議:) – Matt 2013-03-11 18:29:05

0

根據你的問題,你可以使用任一隊列服務並獲得好的結果。但是他們每個人都會遇到不同的挑戰以及優勢。

服務總線隊列的一些優點是它提供了一個持久連接(最多100個連接)的阻塞接收,它可以監視消息的完成,並且可以發送更大的消息(256KB)。

存儲隊列在服務總線解決方案上的一些優點是速度稍快(如果15 ms對您來說很重要),您可以使用單個存儲系統(因爲無論如何,您可能都會將存儲用於blob和表服務)和簡單的自動縮放。如果您需要根據負載自動擴展您的輔助角色,則通過存儲隊列傳遞請求會導致自動伸縮 - 您只需在縮放選項卡下的Azure雲服務UI中設置自動伸縮。

兩個蔚藍隊列服務更深入的比較,可以在這裏找到:http://msdn.microsoft.com/en-us/library/hh767287.aspx

而且,使用隊列時,你怎麼能通知Web角色處理已完成?

對於Azure存儲隊列解決方案,我寫了一個庫,可以幫助:https://github.com/brentrossen/AzureDistributedService。 它提供了一個代理層,用於促進從Web角色到工作角色的RPC樣式通信,並通過存儲隊列返回。

相關問題