首页 > 解决方案 > 仅在合适的条件下执行工作

问题描述

我正在使用带有 sidekiq 适配器的活动作业,并且我只想在满足某些条件时才执行作业,例如。我追加到队列,但我不想执行队列中的任何项目,除非设置了特定的 redis 标志。我怎样才能做到这一点?如果在触发器之前,我会检查是否设置了标志并抛出异常,我想它会起作用,但它看起来并不优雅。

标签: ruby-on-railsrubysidekiqrails-activejob

解决方案


class SendNotificationsJob
  include Sidekiq::Worker
  queue_as :default

  def perform(order)
    order_status = $redis_server.get("#{order.id}:status")
    unless 'done' == order_status
      SendNotificationsJob.set(wait: 10.minutes).perform_later(order)
      return # end this job. new job will check in 10min later
    end
    # fill here
  end
end

这将在不重试问题的情况下工作。但是,我的建议是使用像aasm这样的事件机器。必要时调用作业。否则,你就是在浪费资源。


推荐阅读