我的应用程序在erlang集群中运行 - 通常有两个或更多节点。节点之间有活跃的监控(使用erlang:monitor_node)工作正常 - 我可以检测并响应已启动的节点现在已关闭的事实。
但是,我如何才能发现该节点已重新启动并重新开始运营?我当然可以定期ping节点直到它重新启动,但有没有更好的方法让我错过了?流程组是实现这一目标的更好方法吗?
(已编辑添加)
我认为执行选举主管等技术的答案是我缺少的思维过程。我会调查并将此问题标记为已完成....
答案 0 :(得分:2)
但是,我如何才能发现该节点已重新启动并重新开始运营?我当然可以定期ping节点直到它重新启动,但有没有更好的方法让我错过了?流程组是实现这一目标的更好方法吗?
只是一个想法,但如何重新启动节点本身 显式通知主管/监控节点它已完成重启并且它可以再次使用?
您可以为此目的使用重复的“心跳消息”,或者提出一个特别意味着在成功初始化后发送一次的自定义消息。有点像:
start(SupervisorPID) ->
SuperVisorPID ! {hello, MyPID};
mainloop().
答案 1 :(得分:1)
您可以创建global_group,然后使用global_group:monitor_nodes(true)来监视同一个全局组中的其他节点。监视节点的进程将获得nodeup和nodedown消息。