Erlang OTP分布式应用程序接管

Erlang OTP分布式应用程序接管,erlang,distributed,otp,Erlang,Distributed,Otp,我正在基于一个配置文件动态地将一个Erlang应用程序加载到系统中,该配置文件阻止我在启动时启动分布式应用程序——我能够让故障切换正常工作,但不能进行故障回复(或者用OTP术语来说,接管) 假设我让NodeA运行应用程序,NodeB作为故障转移节点。我在NodeA上拉了线,应用程序迁移到NodeB。这是意料之中的。但当我让NodeA恢复在线并尝试调用application:start(MyApp)时,我得到: {error,{shutdown,{myapp,start,[normal,[“con

我正在基于一个配置文件动态地将一个Erlang应用程序加载到系统中,该配置文件阻止我在启动时启动分布式应用程序——我能够让故障切换正常工作,但不能进行故障回复(或者用OTP术语来说,接管)

假设我让NodeA运行应用程序,NodeB作为故障转移节点。我在NodeA上拉了线,应用程序迁移到NodeB。这是意料之中的。但当我让NodeA恢复在线并尝试调用
application:start(MyApp)
时,我得到:

{error,{shutdown,{myapp,start,[normal,[“config.xml”]]}}
这表示应用程序无法启动

不管怎样,它无法启动,因为我已经在另一个NodeB上运行了监管者,并且我已经将它们连接在一起

我可以想象我可以在MyApp上调用application:takeover/2来重新控制节点,并在另一个节点上终止应用程序

{error,{not_running_distributed,MyApp}}

但这也不行。我的节点优先级列表是
[NodeA,{NodeB,NodeC}]
,因此我认为应用程序应该知道,一旦恢复在线,就会移动到优先级更高的节点


在这种情况下如何实现接管?

您可能需要使用
应用程序:接管/2

此外,第一个答案声称分布式应用程序仅作为发布的一部分工作。。。但我的故障切换工作正常,只是回切不起作用!为什么要使用XML文件进行配置?我相信您可以将其转换为erlang样式的配置,从而允许您在引导时启动它。而且,XML很糟糕。与第三方组件集成。。。然而,XMerl工作得很好,功能也很好。此外,我们正在分发Erlang应用程序。作为软件。它可以帮助您了解应用程序将在接管节点上完全启动,然后在运行节点上停止。如果您的应用程序正在全局注册某些内容,则可能会失败,因为它已注册。