我有一个简单的基于GenServer的应用程序,该应用程序可以解析网页并处理从网页获取的数据。代码大致如下:
def start_link do
GenServer.start_link(__MODULE__, %{})
end
def init(state) do
schedule_work(1)
{:ok, state}
end
def handle_info(:work, state) do
// Request webpage using HTTPoisson
// Parse data using Floki
// Use it
schedule_work(10 * 60) # Reschedule after 10 minutes
{:noreply, state}
end
defp schedule_work(timeout) do
Process.send_after(self(), :work, timeout * 1000)
end
今天,第三方站点停止提供正确的标记已有一段时间,解析失败并导致GenServer崩溃。主管重新启动它,它立即崩溃。 :max_restarts
之后,主管最终停止了该应用程序。
我不想简单地增加:max_restarts
。有没有办法告诉Supervisor在一定时间后尝试重新启动?还是我应该在解析代码中进行更多的错误处理,以防止该过程首先崩溃(我认为这会违背“让它崩溃”的理念)?