1

在我的服务部署中,我有两个角色.. 一个 web 角色和一个工作角色..
在我的 webrole 的 on_start() 方法中,我枚举了工作角色的实例并在某个内部端点上创建了一个 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();
        }
4

2 回答 2

4

我建议将重试逻辑构建到您的循环中,以便当它无法建立连接时,它只是休眠并稍后重试。这不仅可以解决您的启动问题,还可以帮助您解决在结构控制器添加/删除实例时对服务拓扑的更改(这可能由于多种原因而发生)。

更进一步,您可以利用 RoleEnvironmentChanging 和 RoleEnvironmentChanged 事件来提供有关何时添加/删除实例的通知。但是我个人并没有利用这一点,也不能肯定地说这些方法可能会或可能不会反映特定实例的“就绪状态”。

于 2012-04-11T13:01:50.570 回答
1

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

于 2012-04-11T18:48:25.853 回答