【问题标题】:restart frequency for :simple_one_for_one worker:simple_one_for_one worker 的重启频率
【发布时间】:2016-05-03 13:57:20
【问题描述】:

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

我也尝试在工作规范中设置 :max_restarts(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

【问题讨论】:

    标签: elixir erlang-otp


    【解决方案1】:

    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

    【讨论】:

    • 实际上,我确实尝试将 max_restart 和 max_seconds 添加到 supervise/2 函数,但主要问题是我在 10 秒内重启了 3 次,所以频率不匹配 - 我应该尝试下次更好地理解文档 - 谢谢!
    猜你喜欢
    • 2017-05-02
    • 2020-07-22
    • 2012-05-07
    • 1970-01-01
    • 2014-12-09
    • 2016-08-16
    • 1970-01-01
    • 2019-02-12
    • 2018-07-19
    相关资源
    最近更新 更多