Перемещение задания Resque между очередями

Есть ли способ переместить задание восстановления между двумя разными очередями?

Иногда мы попадаем в ситуацию, когда у нас большая очередь и работа, которая близка к концу, мы находим необходимость "повысить свой приоритет". Мы подумали, что это может быть простой способ просто переместить его в другую очередь, в которой работник ожидает каких-либо высокоприоритетных заданий.

Такое случается редко, и обычно это тот случай, когда мы получаем специальный звонок от клиента, поэтому масштабирование, реорганизация не кажутся абсолютно необходимыми.

2 ответа

В Resque нет ничего встроенного. Ты можешь использовать rpoplpush лайк:

module Resque
  def self.move_queue(source, destination)
    r = Resque.redis
    r.llen("queue:#{source}").times do
      r.rpoplpush("queue:#{source}", "queue:#{destination}")
    end
  end
end

https://gist.github.com/rafaelbandeira3/7088498

Если это редкий случай, вам, вероятно, лучше просто вручную вставить новую работу в более короткую очередь. Вы захотите убедиться, что в вашей системе есть способ определить, что задание уже выполнено, и выполнить аварийное отключение, чтобы, когда задание в длинной очереди, наконец, было достигнуто, оно не обрабатывалось снова (если двойная обработка является проблемой для вы).

Другие вопросы по тегам