我有一个Elixir项目,它使用Erlang全局模块全局注册节点:
: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调用中使用全局别名?
答案 0 :(得分:2)
全局注册表用于注册流程。所以当你打电话时:
:global.register_name(:my_node, self)
您正在全球注册当前流程(由self
提供)。
没有节点名称注册,因为它们的名称已在全球范围内可用。因此,帖子中的最后一个片段是正确的方法。