动态创建唤醒器时如何设置重启频率?在当前设置中,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/