【发布时间】:2016-03-16 00:37:59
【问题描述】:
我正在使用具有 2 个节点的 Phoenix 框架开发应用程序。应用程序需要每 10 分钟运行 N 个计划任务。每个任务都有自己的上下文。我需要连接节点,以便我可以平衡两个节点之间的计划任务。什么是实现这一点的好方法?
【问题讨论】:
我正在使用具有 2 个节点的 Phoenix 框架开发应用程序。应用程序需要每 10 分钟运行 N 个计划任务。每个任务都有自己的上下文。我需要连接节点,以便我可以平衡两个节点之间的计划任务。什么是实现这一点的好方法?
【问题讨论】:
只要网络环境设置正确(允许在正确的端口范围内的主机之间连接等),一个节点上的进程就可以向任何其他节点上的进程发送消息。 Erlang 的位置透明保证确保了这一点。
查看这篇文章了解更多详情:http://tjheeta.github.io/2014/12/05/elixir-inter-node-communication/。
此外,Erlang Port Mapper Daemon (EPMD) (http://erlang.org/doc/man/epmd.html) 处理通信,并可配置为使用特定范围的端口等:
iex --erl "-kernel inet_dist_listen_min 9001 inet_dist_listen_max 9001" ...
另外,请参阅 9.8 和 9.9:http://erlang.org/faq/problems.html
【讨论】:
我相信this question 的答案可能正是您想要的。
TL;DR 使用 cookie iex --cookie 启动每个节点,然后从 iex 中运行 Node.connnect 以连接到另一个节点。我相信您可以通过iex -S mix启动每个凤凰应用程序
顺便说一句,即使通过此过程,您也无法在节点之间共享进程。这是有意为之的——节点之间的共享进程会很危险、很脆弱并且会阻碍扩展。
【讨论】: