:rpc.call 使用全局注册节点别名失败

:rpc.call fails with global registered node alias

我有一个使用 Erlang 全局模块全局注册节点的 Elixir 项目:

:global.register_name(:my_node, self)

从集群中的另一个节点,我可以使用全局别名获取已注册节点的 pid:

:global.whereis_name :my_node

但是我无法使用全局别名发出 rpc 调用。以下失败:

:rpc.call(:my_node, Foo.Bar, :new, ["hello"])
>> {:badrpc, :nodedown}

如果我使用完整的节点名称,我可以发出 rpc 调用。以下作品:

:rpc.call(:"mynode@127.0.0.1", Foo.Bar, :new, ["hello"])

是否可以在 rpc 调用中使用全局别名?

全局注册表用于注册进程。所以当你打电话时:

:global.register_name(:my_node, self)

您正在全局注册当前进程(由 self 给出)。

没有节点名称注册,因为它们的名称已经在全球范围内可用。所以你 post 中的最后一个片段是正确的做法。