动态创建唤醒器时如何设置重启频率?在当前设置中,worker 不断重启。

我也试过设置:max_restarts,在 worker 规范中(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 worker 内部:
def handle_info({any, :timeout}, _state) do
  {:stop, :timeout, nil}
end

最佳答案

max_restarts: 3, max_seconds: 5 需要添加到 supervise/2 末尾的 init/1 调用中,而不是在子列表中调用的 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

关于elixir - :simple_one_for_one worker 的重启频率,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35023418/

10-13 23:53