【问题标题】:delayed job worker quits when database unavailable数据库不可用时延迟作业工作者退出
【发布时间】:2019-02-09 06:18:12
【问题描述】:

我在分布式系统上使用 mysql 使用带有 ActiveRecord 后端的延迟作业。每当我重新启动 mysql 数据库时,工作人员都会停止。根据日志,每个 worker 尝试重新连接 8 次,间隔为 5 秒,然后以 FATAL -- : MySQL client is not connected 消息退出。

这意味着每次我重新启动数据库时,我都必须重新启动我的所有工作人员。

有没有办法增加重连尝试的次数?

【问题讨论】:

    标签: mysql ruby-on-rails delayed-job


    【解决方案1】:

    在工作中: class MyJob < ActiveJob::Base retry_on(YourMySQLException, wait: 10.seconds, attempts: 10) end

    如果您希望此重试行为成为所有作业的默认设置,请考虑将此行放入 ApplicationJob,并让您的所有作业都继承自它。

    官方文档的默认值与你从日志中推断的不同,但我想这并不重要 => https://edgeapi.rubyonrails.org/classes/ActiveJob/Exceptions/ClassMethods.html#method-i-retry_on

    不过,另一个问题可能是:为什么需要重启 mysql?这可能不应该发生在生产环境中......

    【讨论】:

    • 我已经检查了这些文档,但认为这与实际作业因某种原因失败时重试的次数有关。就我而言,如果有任何新工作,则由工作人员检查数据库。重启mysql并不是我们积极追求的事情,但这总是会发生的。如果发生这种情况,问题后一切都会恢复,除了工作人员,这些进程只是停止。
    猜你喜欢
    • 1970-01-01
    • 2016-04-02
    • 2012-02-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-29
    • 1970-01-01
    • 1970-01-01
    • 2014-05-09
    相关资源
    最近更新 更多