重启频率:simple_one_for_one worker

restart frequency for :simple_one_for_one worker

动态创建woker时如何设置重启频率?在当前设置中,worker 会无限重启。

我也试过设置 :max_restarts, 在 worker spec(worker(Kombiner.Foo, [], max_restarts: 3, max_seconds: 5) ) 而且它似乎什么也没做(它将无限重启)。

def start_child(input) do
  Supervisor.start_child(@name, [input])
end


def init(:ok) do
  children = [
    worker(Kombiner.Foo, [], restart: :transient)
  ]
  supervise(children, strategy: :simple_one_for_one)
end

Kombiner.Foo 工人内部:

def handle_info({any, :timeout}, _state) do
  {:stop, :timeout, nil}
end

max_restarts: 3, max_seconds: 5 需要添加到 init/1 末尾的 supervise/2 调用中,而不是子列表中调用的 worker/3 函数。您的代码应如下所示:

def init(:ok) do
  children = [
    worker(Kombiner.Foo, [], restart: :transient)
  ]
  supervise(children, strategy: :simple_one_for_one, max_restarts: 3, max_seconds: 5)
end

重启策略、最大重启次数和最大秒数适用于列表中的所有子项。

有关详细信息,请参阅 the Supervisor.Spec.supervise/2 documentation