我想在SQL数据层中创建一个我想知道的工作者角色,如果它正在运行。
我在调用onStart
时注册了该角色,我正在考虑在onStop
方法中取消注册。我能指望onStop
被召唤吗?或者我应该让它每隔10分钟报告一次,并让另一个应用程序检查它是否有效,如果不是,请将设备设置为离线?
人们如何解决分布式程序的这个问题?
是否可以为工作人员/网络角色的特定实例获取唯一Guid。
答案 0 :(得分:1)
心跳是正确的方法。您无法保证将调用OnStop
,因为硬件可能会突然失败。
答案 1 :(得分:1)
不,你不能指望OnStop()
被召唤。如果未运行实例运行崩溃OnStop()
的节点。如果在您的实例的Run()
或OnStart()
之外传播异常,则不会调用OnStop()
。这些是我现在能想到的最好的案例,也许还有更多的案例。最重要的是,您不能指望被调用OnStop()
。
您应该使用存储在某些持久存储中的心跳 - 例如SQL Azure或Azure队列或其他任何内容。当您想要进行“清理”或“重新处理”时,您只需选择在很长一段时间内没有心跳的东西。例如,实时实体每隔一分钟就会发出一次心跳,然后你可以考虑任何没有心跳的事情,持续五分钟或更长时间。