erlang - 如何在 Erlang/Elixir 5 秒后自定义重启策略?
问题描述
在 Erlang/Elixir 中,当孩子崩溃时,它可以重新启动孩子。
我有一个保持数据库连接的 gen_server。
如果连接无法实现,我希望进程崩溃并在 5 秒后重新启动(或更复杂的规则,例如第一次重启是 100ms,第二次是 500ms,第三次是 1s ...)。
如何配置主管来处理重启时间?
默认情况下,gen_server 将尝试无休止地重新启动。
解决方案
您将需要在自己的代码中处理该逻辑(称为“指数退避”),因为Supervisor
它只是处理监视和重新启动子项。
您可以在 https://hex.pm 上找到一些有助于实现此目的的软件包(搜索exponential backoff
)
但还要检查您的数据库客户端/库,它们中的大多数都是开箱即用的 - 至少任何使用该db_connection
库的东西,如大多数 ecto 客户端、mongodb 等。
因此,您应该能够简单地为您的数据库客户端调整配置,并且一切都应该正常工作。
推荐阅读
- django - python ../manage.py collectstatic - RuntimeError: Max post-process pass exceeded
- oracle - for 循环插入邮件表
- javascript - 如何在firebase实时删除特定的孩子(Angular 7)
- c# - 仅在 EF Core 中的 Scaffold-DbContext 存储过程
- matrix - 对 GLSL 向量矩阵乘法顺序感到困惑
- python - 为什么 Tkinter 可执行文件不能捕获组合键?
- c - 为什么 valgrind memcheck 没有发现错误?
- php - 在 laravel 6.6 中作曲家需要 maddhatter/laravel-fullcalendar
- java - 从排序数组中删除重复项,以便允许两个重复项
- python - 在读取文件时不断更新 tkinter 应用程序