在Erlang中动态添加节点和global_groups

i5desfxk  于 2023-10-14  发布在  Erlang
关注(0)|答案(2)|浏览(228)

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

ih99xse1

ih99xse11#

查看global_group source,节点列表是节点在同步时检查的配置的一部分。
但是,有一个导出函数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()

应该能让一切恢复正常
我没有试过上面的食谱,但它看起来很好吃。^_^

7xllpg7q

7xllpg7q2#

节点是一个正在执行的Erlang运行时系统,它被赋予了一个名称,使用命令行标志-name(长名称)或-sname(短名称)。
隐藏节点是以命令行标志-hidden开始的节点。隐藏节点和其他节点之间的连接是不可传递的,它们必须显式设置。此外,隐藏节点不会显示在nodes()返回的节点列表中。相反,必须使用节点(隐藏)或节点(连接)。这意味着,例如,隐藏节点将不会被添加到global正在跟踪的节点集合中。
所以简而言之,是的,您需要为我们的节点给予一个名称,以便其他节点能够找到它。
它感觉你要么是在问而没有尝试,要么是有一个非常复杂的问题,也许一个你试图完成的例子可以让你给予一个更好的答案。

相关问题