我想在erlang集群中启动一个唯一的全局注册gen_server进程.如果进程停止或运行它的节点发生故障,则将在其他节点之一上启动该进程.
该过程是主管的一部分.问题是在第二个节点上启动管理程序失败,因为gen_server已在运行并从第一个节点全局注册.
{ok, Pid}已经运行的进程而不是启动新的gen_server实例?
global:trans()在gen_server的start_link函数中使用某种东西吗?
start_link() ->
global:trans({?MODULE, ?MODULE}, fun() ->
case gen_server:start_link({global, ?MODULE}, ?MODULE, [], []) of
{ok, Pid} ->
{ok, Pid};
{error, {already_started, Pid}} ->
link(Pid),
{ok, Pid};
Else -> Else
end
end).