Как определить 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.