1

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

我在被调用时注册了角色onStart,我正在考虑在onStop方法中取消注册它。我可以指望onStop被叫吗?或者我应该让它每 10 分钟报告一次它的活动,并让另一个应用程序检查它的活动,如果没有,将设备设置为离线?

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

是否可以获得工作人员/网络角色的特定实例的唯一指南。

4

2 回答 2

1

心跳是执行此操作的正确方法。你不能保证OnStop会被调用,因为硬件可能会突然发生故障。

于 2012-10-28T18:26:56.783 回答
1

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

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

于 2012-10-29T12:45:31.377 回答