无论如何在azure中知道某些其他角色的实例是否已经开始?

时间:2012-04-11 12:19:23

标签: azure connection azure-worker-roles azure-web-roles

在我的服务部署中,我有两个角色..一个web角色和一个辅助角色..
在我的webrole的on_start()方法中,我枚举了worker角色的实例,并在一些内部创建了一个tcp连接终点。但很多时候它失败了,因为工人角色的实例还没有开始 所以问题是,我可以知道实例已经开始了还是我可以等待工作角色的实例以某种方式启动? 这是代码

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();
        }

2 个答案:

答案 0 :(得分:4)

我建议在你的循环中构建重试逻辑,这样当它无法建立连接时,它就会睡眠并在以后再次重试。这不仅可以解决您的启动问题,而且还可以帮助您解决服务拓扑的变化,因为结构控制器添加/删除了实例(这可能由于多种原因而发生)。

更进一步,可能能够利用RoleEnvironmentChanging和RoleEnvironmentChanged事件来提供添加/删除实例的时间的通知。但我个人并未充分利用这一点,并且无法确切地说这些方法可能会或可能不会反映特定情况的“就绪状态”。

答案 1 :(得分:1)

另一种选择是让工作者角色在启动时将消息放入队列中。然后你可以检查队列并等待它在那里发布消息。