如何监视已关闭并正在重新启动的远程erlang节点

Ala*_*ore 6 erlang

我的应用程序在erlang集群中运行 - 通常有两个或更多节点.节点之间有活跃的监控(使用erlang:monitor_node)工作正常 - 我可以检测并响应已启动的节点现在已关闭的事实.

但是,我如何才能发现该节点已重新启动并重新开始运营?我当然可以定期ping节点直到它重新启动,但有没有更好的方法让我错过了?流程组是实现这一目标的更好方法吗?

(已编辑添加)

我认为执行像选举主管这样的技术的答案是我缺少的思考过程.我会调查并将此问题标记为已完成....

non*_*one 2

但是我如何才能知道节点已重新启动并恢复正常工作呢?当然,我可以定期对节点执行 ping 操作,直到其恢复,但是有没有更好的方法是我错过的呢?流程组是实现这一目标的更好方法吗?

只是一个想法,但是让重新启动的节点本身 明确通知主管/监控节点它已完成重新启动并且再次可用怎么样?

为此,您可以使用重复出现的“心跳消息”,或者提出专门用于在成功初始化后发送一次的自定义消息。大致如下:

start(SupervisorPID) ->
  SuperVisorPID ! {hello, MyPID};
  mainloop().
Run Code Online (Sandbox Code Playgroud)

  • 看来你们的节点基本上是去中心化的,没有任何形式的中心节点?我假设通常情况下,您需要至少一个主管或至少一些“主”节点。所有节点都可以将其报告/消息发送到,即某种形式的“节点注册表”​​。也许您需要提供更多信息,我可以想象,如果还没有主节点,也可以考虑按照惯例让每个节点成为主节点。这将满足平等要求。 (2认同)