我应该在erlang中使用什么作为服务位置?

我应该在erlang中使用什么作为服务位置?,erlang,Erlang,我正在编写我的第一个分布式erlang应用程序,我注意到我必须知道我的“服务”在哪个节点上运行。如何在不知道服务在哪个节点上运行的情况下向服务发送请求 基本上我想做这样的事情: ReferenceToTheServiceProcess = locate(my_service). ReferenceToTheServiceProcess ! {request, Stuff}. 或其他具有同等效果的东西(松耦合) 谢谢 您可以使用全局名称注册服务流程,例如使用。这样,您就不必知道您的服务当前驻留在

我正在编写我的第一个分布式erlang应用程序,我注意到我必须知道我的“服务”在哪个节点上运行。如何在不知道服务在哪个节点上运行的情况下向服务发送请求

基本上我想做这样的事情:

ReferenceToTheServiceProcess = locate(my_service).
ReferenceToTheServiceProcess ! {request, Stuff}.
或其他具有同等效果的东西(松耦合)


谢谢

您可以使用全局名称注册服务流程,例如使用。这样,您就不必知道您的服务当前驻留在哪个节点上,而且您的服务看起来就像您想要的一样。

您可以使用该模块注册流程。 从您的服务流程呼叫:

global:register_name(my_service, self()).
Pid = global:whereis_name(my_service),
Pid ! {request, Stuff}.
要向全局注册的进程调用发送消息,请执行以下操作:

global:register_name(my_service, self()).
Pid = global:whereis_name(my_service),
Pid ! {request, Stuff}.
或致电:

global:send(my_service, {request, Stuff}).
注册功能是原子的。
如果服务进程终止或节点关闭,则该名称将被全局注销。

或者,如果您仍然希望本地注册进程,则可以编写如下内容:

 where_is_service(Service) ->
     lists:filter(fun(X) -> X =/= undefined end, [rpc:call(Node, erlang, whereis, [Service]) || Node <- [node() | nodes()]]).
希望这有帮助