2011-05-10 197 views
1

我有一個初學者工作者。它做了一些初始化。我希望其他工人等待這個初學者。我腦海中唯一的辦法是將消息放入隊列中。工人將輪詢隊列。他們將在閱讀郵件後開始。有更好的同步方法嗎?Azure Worker角色溝通

回答

2

隊列輪詢的問題:一旦一名員工看到「我準備好」隊列消息,其他員工會發生什麼情況?如果讀者刪除了隊列消息(它應該如此),其他人永遠不會看到它。如果讀者沒有刪除它,那麼在剩下的時間裏你就會收到這條消息(下次啓動時,消息仍然存在)。

如果您在啓動輔助角色實例上使用AreYouRunning()方法返回true/false承載了一個非常簡單的wcf服務,該怎麼辦?如果實例仍在OnStart()中,則您應該無法連接到該服務。一旦你連接,你只需檢查返回值。您只需要其他角色在其OnStart()或Run()中設置某種類型的輪詢機制來執行定期輪詢。

可能還有其他方法來執行此操作,例如在Azure表中有一行。在啓動其他角色之前,您仍然需要確保您可以清除該表中的「正在運行」狀態,因此wcf服務的想法可能更好地滿足您的需求。

+0

假設我們將有10名工人。 Starter工作人員會將10個啓動消息放入隊列中。每個工作人員將閱讀一條消息並開始工作。 – 2011-05-10 18:01:10

+0

這並不規模。將你的工作人員從10到12個實例。你的第11次和第12次做什麼?檢查隊列,什麼也看不到。如果你服務的路線,他們打電話service.AreYouRunning(),看到「真實」,生活是美好的。 – 2011-05-10 18:04:29

+0

注意:當輔助角色實例重新啓動時,您遇到同樣的問題。不會有等待他們的隊列消息。 – 2011-05-10 18:06:28