Выполняйте работу, только если есть подходящие условия - PullRequest
0 голосов
/ 21 февраля 2019

Я использую активную работу с адаптером sidekiq и хочу выполнять работу, только если выполнены некоторые условия, например.Я добавляю в очередь, но не хочу выполнять какой-либо элемент из очереди, если установлен определенный флаг redis.Как я могу это сделать?Если перед триггером я проверю, установлен ли флаг, и сгенерирую исключение, оно будет работать, я полагаю, но это не кажется элегантным.

1 Ответ

0 голосов
/ 25 февраля 2019
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 .вызвать работу, когда это необходимо.в противном случае вы тратите ресурсы впустую.

...