首页 > 解决方案 > 如何在 Erlang/Elixir 5 秒后自定义重启策略?

问题描述

在 Erlang/Elixir 中,当孩子崩溃时,它可以重新启动孩子。
我有一个保持数据库连接的 gen_server。
如果连接无法实现,我希望进程崩溃并在 5 秒后重新启动(或更复杂的规则,例如第一次重启是 100ms,第二次是 500ms,第三次是 1s ...)。

如何配置主管来处理重启时间?
默认情况下,gen_server 将尝试无休止地重新启动。

标签: erlangelixir

解决方案


您将需要在自己的代码中处理该逻辑(称为“指数退避”),因为Supervisor它只是处理监视和重新启动子项。

您可以在 https://hex.pm 上找到一些有助于实现此目的的软件包(搜索exponential backoff

但还要检查您的数据库客户端/库,它们中的大多数都是开箱即用的 - 至少任何使用该db_connection库的东西,如大多数 ecto 客户端、mongodb 等。

因此,您应该能够简单地为您的数据库客户端调整配置,并且一切都应该正常工作。


推荐阅读