gpt4 book ai didi

elixir - 有选择地启动 elixir 应用程序

转载 作者:行者123 更新时间:2023-12-01 11:19:20 25 4
gpt4 key购买 nike

对于我的特定用例,如何控制伞形项目中的哪些应用程序启动:

  • 仅启动尚未在集群中运行的某些应用程序(例如单例应用程序)
  • 仅根据节点名称启动某些应用程序(例如某些应用程序可能使用具有 IP 地址限制的远程系统)
  • 打开控制台时不要自动启动任何应用程序(例如 iex -S mix)

  • 谢谢

    最佳答案

    您可以通过使用 OTP 分布式应用程序功能来处理 #1。您需要配置kernel像这样的应用程序:

    config :kernel, :distributed, [
    {:app1, 5_000, [:"node1@<x.x.x.x>", {:"node2@<x.x.x.y>", :"node3@<x.x.x.z>"}]},
    {:app2, [:"node2@<x.x.x.y>", {:"node1@<x.x.x.x>", :"node3@<x.x.x.z>"}]},
    ...
    ]

    config :kernel,
    sync_nodes_mandatory: [:"node1@<x.x.x.x>", :"node2@<x.x.x.y>", ...],
    sync_nodes_timeout: 5_000

    以上将确保 app1开始于 node1 ,如果 node1故障或不可用,它将尝试备份节点之一, node2node3 (订单未定义)。它还要求这在 5 秒内发生。同样, app2将于 node2 开始,或者失败了,备份之一,但它没有启动超时。

    其他两个内核设置要求在启动任何应用程序之前,列表中的所有节点都已连接,并且必须在 5 秒内发生,否则启动过程将失败。

    所有这些设置都可以根据集群的需要进行必要的调整。这与自动确定要将应用程序分配到的节点并不完全相同,但它会确保它仅在其中一个节点上运行。

    您可以在 Erlang 手册的 Distributed Applications 中阅读有关此内容的更多信息。文档。

    上面的内容在某种程度上也满足了您对 #2 的要求,但不是基于节点名称启动,而是配置允许应用程序运行的节点,它会这样做。您可以使用 included_applications 自行管理。 ,并根据当前节点名称或其他一些条件有条件地启动它们,但这将要求您将这些包含的应用程序作为包含应用程序的主管树的一部分启动。根据您的保护伞的设置方式,这可能意味着您需要创建一个“ shell ”应用程序,它主要负责协调所包含应用程序的启动和配置。您可以阅读更多关于这些的信息 here

    关于elixir - 有选择地启动 elixir 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45828820/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com