Повторная постановка заданий в очередь с помощью Resque

Я заинтересован в использовании Resque для распределения работы на множество разных компьютеров. Но у меня есть одна забота. Если мне нужно убить одного из рабочих, который работает над заданием, я хотел бы, чтобы он автоматически ставил это задание в очередь, чтобы гарантировать, что оно будет запущено другим рабочим. Я работал с Django Celery и просто нажимаю CTRL+C, который убивает рабочего, а также ставит задачу в очередь. Есть ли способ сделать это с Resque в Rails? Благодарю вас!


person Silverbolt    schedule 17.11.2011    source источник
comment
Вы уверены, что Resque не будет повторно ставиться в очередь автоматически? Resque предполагает хаос, поэтому я не удивлюсь, если он просто сработает.   -  person Paulo Casaretto    schedule 18.11.2011
comment
Я пробовал. Я управлял двумя рабочими с двумя разными работами. Я нажал CTRL-C на одном из воркеров, и когда я проверил Resque-web, оказалось, что он успешно обработал задание, а воркер, которого я не остановил, не взял на себя дополнительную работу. =/ Если бы я мог просто захватить этот CTRL-C и изящно завершить рабочий процесс и повторно поставить задание в очередь.   -  person Silverbolt    schedule 19.11.2011


Ответы (1)


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

Например:

def self.perform(args)
  trap("INT") do
     puts "Signal was caught!"
     #either raise an error here if using a tool like resque-retry or requeue the job
   end
  #Do work here
end

Извините за глупый вопрос ;)

person Silverbolt    schedule 22.11.2011