【问题标题】:Efficiently reschedule ActiveJob (resque/sidekiq)有效地重新调度 ActiveJob (resque/sidekiq)
【发布时间】:2015-03-28 13:36:15
【问题描述】:

我正在使用Rails 4.2 应用程序,它使用ActiveJob 支持resque/sidekiq 进行电子邮件调度。当用户创建时事通讯活动时,会创建一个新作业并安排在特定日期。这一切都很好,但是当用户更改交货日期时会发生什么。

在这种情况下,每个作业都可以检查是否应该交付,因此无效作业将被忽略,并且只会执行最后一个作业。这可能有效,但如果用户进行 1k 次编辑,会将 1k-1 个无效作业推入队列 - 不好。我认为应该更新现有工作或用新工作替换。据我所知,在Redis 队列中搜索job_id 很慢。

在 Rails 中重新安排 ActiveJobs 的正确方法是什么(使用 resque/sidekiq)?

【问题讨论】:

  • 您是否考虑过迁移到 Que,它在 PostgreSQL 之上工作并与 AJ 集成?至少在批量搜索更新时速度很快,我不确定是否可以重新安排。
  • 谢谢@D-side。我会检查它是否适合我的平台。
  • @D-side 有趣的是我从未使用过 que gem。 Que 的主要目标是可靠性,而且看起来速度也很快 - 非常适合企业服务。
  • 我实际上使用它是为了减少依赖。我并没有期待很多工作,因此将工作存储移交给我已经在使用的数据库似乎很棒。可惜项目从未完成:(

标签: ruby-on-rails resque sidekiq rails-activejob


【解决方案1】:

没有,工作不会被重新安排。您已经回答了自己的问题:

在这种情况下,每个作业都可以检查是否应该交付,因此无效作业将被忽略,只执行最后一个。

另一种方法是重新设计发送活动的方式:将发送日期存储在数据库中,并让 cron 每分钟检查需要发送的活动现在,然后立即创建 Sidekiq 作业。

【讨论】:

    猜你喜欢
    • 2016-08-24
    • 2015-03-29
    • 1970-01-01
    • 2015-04-14
    • 2023-04-02
    • 1970-01-01
    • 2012-07-19
    • 2020-04-30
    • 2015-05-25
    相关资源
    最近更新 更多