【问题标题】:Order of execution of jobs in delayed_jobdelay_job 中作业的执行顺序
【发布时间】:2010-12-16 15:12:40
【问题描述】:

我有一个带有插件 https://github.com/tobi/delayed_job 的 Rails 应用程序

有时执行作业的顺序与创建它们的顺序不同。

我希望作业按照创建时的顺序执行,因为在某些情况下要执行作业,前一个作业已成功执行很重要。

请帮忙。

问候, 潘卡伊

【问题讨论】:

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


    【解决方案1】:

    如果不确切了解您是如何创建作业的,则很难判断,但除了 created_at 时间之外,影响执行顺序的唯一因素是为作业设置的优先级。我不知道您使用的 tobi 叉子和collectiveidea 叉子之间的区别,但这是来自collectiveidea 文档:

    默认情况下,所有作业的调度优先级 = 0,这是最高优先级。您可以通过将 Delayed::Worker.default_priority 设置为其他值来更改此设置。较低的数字具有较高的优先级。

    以及来自迁移:

    table.integer :priority, :default => 0 # 允许某些作业跳到队列的最前面

    您当然可以在创建作业时手动指定优先级。

    【讨论】:

      【解决方案2】:

      据我了解,失败的作业将被重新安排,以便稍后重试。

      “失败时,作业会在 5 秒 + N ** 4 后再次调度,其中 N 是重试次数。”来自README.textile 的设置部分。

      我假设剩余的作业将同时处理。您可能想要监控您的延迟作业表并查看是否有任何作业的 last_error 字段值设置为 NULL 以外的值。

      这也可能取决于您有多少工作进程。 delay_job worker 将作业按顺序从delayed_jobs 表中取出,但不能保证worker 会按顺序完成任务。

      【讨论】:

        猜你喜欢
        • 2011-09-01
        • 1970-01-01
        • 2019-09-07
        • 1970-01-01
        • 2012-10-19
        • 1970-01-01
        • 2017-03-25
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多