我的应用程序在erlang集群中运行 - 通常有两个或更多节点.节点之间有活跃的监控(使用erlang:monitor_node)工作正常 - 我可以检测并响应已启动的节点现在已关闭的事实.
但是,我如何才能发现该节点已重新启动并重新开始运营?我当然可以定期ping节点直到它重新启动,但有没有更好的方法让我错过了?流程组是实现这一目标的更好方法吗?
(已编辑添加)
我认为执行像选举主管这样的技术的答案是我缺少的思考过程.我会调查并将此问题标记为已完成....
但是我如何才能知道节点已重新启动并恢复正常工作呢?当然,我可以定期对节点执行 ping 操作,直到其恢复,但是有没有更好的方法是我错过的呢?流程组是实现这一目标的更好方法吗?
只是一个想法,但是让重新启动的节点本身 明确通知主管/监控节点它已完成重新启动并且再次可用怎么样?
为此,您可以使用重复出现的“心跳消息”,或者提出专门用于在成功初始化后发送一次的自定义消息。大致如下:
start(SupervisorPID) ->
SuperVisorPID ! {hello, MyPID};
mainloop().
Run Code Online (Sandbox Code Playgroud)