Erlang支持使用 global_group 模块将其节点分组。 此外,Erlang支持动态添加节点到节点网络。这两个功能是否可以互相使用?
据我所知,您必须在启动时命名每个节点以使用全局组。

有帮助吗?

解决方案

查看 global_group来源 ,节点列表是节点在同步时检查的配置的一部分。

但是有一个导出的函数 global_group :global_groups_changed ,用于处理节点列表更改。

来自 kernel:config_change (参见 Module:config_change / 3 )因此在发布升级期间(OTP嵌入式系统样式)可以在global_group中添加新节点(参见”更新应用程序规范“

可能可以简单地执行:

application:set_env( kernel, global_groups, [GroupTuple|GroupTuples] ),
kernel:config_change( [ { global_groups, [GroupTuple|GroupTuples] } ], [], [] )

假设您已经有了global_groups配置或

application:set_env( kernel, global_groups, [GroupTuple|GroupTuples] ),
kernel:config_change( [], [{ global_groups, [GroupTuple|GroupTuples] }], [] )

如果要将global_groups配置到尚不存在的群集中。

您需要在每个节点上执行上述操作,如果他们决定在此过程中进行同步,则他们将拆分配置差异的行。 (请参阅 global_group来源中的评论关于发布升级期间的同步)

但是,一旦对所有人做了,

global_group:sync()

应该让一切都恢复正常。

我没有测试过上面的食谱,但它看起来很美味。 ^ _ ^

其他提示

  

节点是执行Erlang运行时   已被赋予名称的系统,   使用命令行标志-name   (长名称)或-sname(短名称)。

     

隐藏节点是以。开头的节点   命令行标志-hidden。   隐藏节点与之间的连接   它们是其他节点不可传递的   必须明确设置。也,   隐藏的节点不会出现在   节点()返回的节点列表。   相反,节点(隐藏)或   必须使用节点(已连接)。这个   例如,意味着隐藏的   节点不会被添加到集合中   全局跟踪的节点。

简而言之,是的,您需要为我们的节点命名,以便其他节点能够找到它。

感觉你要么在没有尝试的情况下提问,要么有一个非常复杂的问题,也许你想要完成的一个例子可以提供更好的答案。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top