Как определить RestartStrategy с динамическим наблюдением

Если запустить дочернюю спецификацию статически:

init(...) ->
    {ok, {{RestartStrategy, MaxR, MaxT},
          [ChildSpec, ...]}}.

Но если я запускаю дочернюю спецификацию динамически:

start_child(SupRef, ChildSpec) -> startchild_ret()

Как определить RestartStrategy、 MaxR и MaxT?

2 ответа

Вы не можете определить RestartStrategy, MaxR и MaxT динамически ни в start_child, ни где-либо еще. Это атрибуты супервизора (не дочерние), и вы можете определить их только в функции обратного вызова init/1 супервизора.

Учитывая, что RestartStrategy является собственностью супервизора, а не его дочерних элементов, вы можете добавить дополнительный слой к своему дереву надзора и иметь несколько супервизоров в качестве дочерних элементов корневого супервизора. Каждый из суб-супервизоров будет указывать разные RestartStrategy, Затем вы добавите детей к соответствующему руководителю.

Изображение из Learn You Some Erlang.

Другие вопросы по тегам