我可以在同一個實例上運行Web角色和Worker角色,還是必須獲得2個獨立的主機實例並支付兩倍的金額?Azure角色和實例
我有一個WCF Web API,我想在Azure上託管。我還有一個工作者角色,用於偵聽Azure存儲中的隊列。每次將消息添加到隊列中時,都會獲取該消息,並根據消息運行一個小任務。
我想知道我是否可以在同一個實例上運行這兩個。
我可以在同一個實例上運行Web角色和Worker角色,還是必須獲得2個獨立的主機實例並支付兩倍的金額?Azure角色和實例
我有一個WCF Web API,我想在Azure上託管。我還有一個工作者角色,用於偵聽Azure存儲中的隊列。每次將消息添加到隊列中時,都會獲取該消息,並根據消息運行一個小任務。
我想知道我是否可以在同一個實例上運行這兩個。
「工作者角色」和「Web角色」只是「運行IIS的Windows Server 2008」和「沒有IIS運行的Windows Server 2008」的簡單模板。關鍵是「角色」是Windows Server虛擬機的定義。對於每個「角色」,您都有一個或多個實例。
在Windows Azure中,兩種角色類型都可以在啓動腳本或OnStart()
處理程序中安裝軟件,修改註冊表設置等,並且都可以在Run()
方法中運行代碼。
對於您的情況,您可以在Web角色中運行WCF Web服務,然後在您的Run()
方法(以相同角色)中啓動一個進程,該進程偵聽您的WCF Web服務發佈的隊列消息。不需要有新角色。
現在:一旦進入大容量情況,您可能希望將您的代碼拆分爲不同的角色,以便您可以獨立擴展它們(無論是VM大小還是VM數量)。
我發佈了另一個關於這個here的答案。
它完全取決於您的要求。您可以簡單地擁有一個工作者角色,如here所述公開外部終結點並公開WCF服務。您還可以擁有作爲WCF服務的Web角色並啓動後臺線程來檢查隊列。工人用這個信息做什麼?什麼過程被執行?這也對解決方案產生影響。
您需要考慮的一個關鍵問題是WCF服務和隊列檢索任務之間的縮放要求是否相同。如果他們是一個單一的角色應該足夠好開始。