Более одного супервизора в приложении Elixir - PullRequest
0 голосов
/ 22 февраля 2019

Я хочу зарегистрировать 2 супервизора root в моем приложении Phoenix, есть ли причины этого не делать?

Пример ниже

defmodule MyApp.Application do
  use Application
  import Supervisor.Spec

  def start(_type, _args) do
    children_sv1 = [
      supervisor(MyApp.Repo, []),
      ... # other workers
    ]

    children_sv2 = [
      supervisor(MyApp.Endpoint, []),
      ... # other workers
    ]

    opts1 = [strategy: :one_for_one, name: MyApp.Supervisor1]
    opts2 = [strategy: :one_for_one, name: MyApp.Supervisor2]

    Supervisor.start_link(children_sv1, opts)
    Supervisor.start_link(children_sv2, opts)
  end
end

1 Ответ

0 голосов
/ 22 февраля 2019

Одна из причин, по которой этого не происходит, заключается в том, что ваше конкретное приложение контролируется как часть дерева контроля OTP.Возвращаемое значение для start используется супервизором приложений верхнего уровня для управления вашим конкретным приложением.

Если вы явно назначите результаты для вызовов супервизора выше, вы увидите, что отбрасываете информацию:

{:ok, sup1_pid} = Supervisor.start_link(children_sv1, opts)
{:ok, sup2_pid} = Supervisor.start_link(children_sv2, opts)
{:ok, sup2_pid}

Это означает, что хотя первый супервизор будет связан с каким-либо процессомзапускает ваше приложение (например, супервизор приложений верхнего уровня), оно не будет отображаться в выходных данных функций, которые смотрят на деревья наблюдения, например Supervisor.count_children.Во время нормальной работы это не должно иметь большого значения, но если что-то пойдет не так, вам самим будет трудно разобраться в проблеме, и инструменты OTP, зависящие от надлежащей иерархии надзора, могут вести себя странно при такой настройке.Изящная остановка приложения может быть или не быть проблемой.

Всегда безопаснее всего указать все дерево контроля в виде правильного дерева - в итоге вы получите гораздо более предсказуемое приложение.Если вам нужен детальный контроль над тем, какие ветви дерева независимы и как их следует перезапускать, дочерние спецификации - ваш лучший друг.

...