2012-04-11 52 views
1

在我的服務部署中,我有兩個角色..一個web角色和一個worker角色..
在我的webrole的on_start()方法中,im枚舉了worker角色的實例並在一些內部端點上創建了一個tcp連接。
,但很多時候它失敗了,因爲worker角色的實例還沒有開始。
所以問題是我可以知道實例是否已經啓動,或者我是否可以等待worker角色的實例以某種方式啓動? herez代碼無論如何在天藍地裏知道一些其他角色的實例已經開始或沒有?

public override bool OnStart() 
     { 
      // For information on handling configuration changes 
      // see the MSDN topic at http://go.microsoft.com/fwlink/?LinkId=166357. 

      ConnectionStatics.ConnectRouterToWorkers(); 
      Messaging.KeepReadingMessages.Start(); 

      return base.OnStart(); 
     } 

回答

1

另一種選擇是讓工作角色在啓動時將消息放入隊列中。然後,您可以檢查隊列並等待它在該處發佈消息。

4

我建議建立重試邏輯進入你的循環,所以當它無法建立連接,它只是睡,後來又試了。這不僅可解決您的啓動問題,而且還可幫助您解決由於實例由結構控制器添加/刪除(可能由於各種原因而發生)的服務拓撲更改。

更進一步,您可能能夠利用RoleEnvironmentChanging和RoleEnvironmentChanged事件來提供何時添加/刪除實例的通知。但我並沒有個人利用這一點,也不能肯定地說這些方法可能會或可能不會反映特定實例的「就緒狀態」。

+0

k讓我試試這個方法 – 2012-04-11 13:16:34

相關問題