: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 中的最后一个片段是正确的做法。
我有一个使用 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 中的最后一个片段是正确的做法。