如何从Azure RoleEntryPoint报告其是否正在运行

时间:2012-10-28 18:13:12

标签: c# azure distributed-computing

我想在SQL数据层中创建一个我想知道的工作者角色,如果它正在运行。

我在调用onStart时注册了该角色,我正在考虑在onStop方法中取消注册。我能指望onStop被召唤吗?或者我应该让它每隔10分钟报告一次,并让另一个应用程序检查它是否有效,如果不是,请将设备设置为离线?

人们如何解决分布式程序的这个问题?

是否可以为工作人员/网络角色的特定实例获取唯一Guid。

2 个答案:

答案 0 :(得分:1)

心跳是正确的方法。您无法保证将调用OnStop,因为硬件可能会突然失败。

答案 1 :(得分:1)

不,你不能指望OnStop()被召唤。如果未运行实例运行崩溃OnStop()的节点。如果在您的实例的Run()OnStart()之外传播异常,则不会调用OnStop()。这些是我现在能想到的最好的案例,也许还有更多的案例。最重要的是,您不能指望被调用OnStop()

您应该使用存储在某些持久存储中的心跳 - 例如SQL Azure或Azure队列或其他任何内容。当您想要进行“清理”或“重新处理”时,您只需选择在很长一段时间内没有心跳的东西。例如,实时实体每隔一分钟就会发出一次心跳,然后你可以考虑任何没有心跳的事情,持续五分钟或更长时间。