2012-04-11 19 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

相关问题