高效地重新安排 ActiveJob (resque/sidekiq)

xpe*_*int 5 ruby-on-rails resque sidekiq rails-activejob

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

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

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

Mik*_*ham 5

没有,工作并不意味着要重新安排。你已经回答了你自己的问题:

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

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