Перемещение задания 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
Если это редкий случай, вам, вероятно, лучше просто вручную вставить новую работу в более короткую очередь. Вы захотите убедиться, что в вашей системе есть способ определить, что задание уже выполнено, и выполнить аварийное отключение, чтобы, когда задание в длинной очереди, наконец, было достигнуто, оно не обрабатывалось снова (если двойная обработка является проблемой для вы).