Как последовательно обрабатывать очереди в Redis и SideKiq в Rails?
Я использую Rails 4 в своем приложении, и вот как я создаю новую работу:
class FetchJob < ActiveJob::Base
queue_as :fetchjob
def perform num
puts num
sleep 30
end
end
Этот код выводит значение num
а затем спит в течение 30 секунд. Я использую sidekiq gem и redis для обработки этой очереди. Я ставлю в очередь задания после того, как пользователь создан.
class FecthJobController < ApplicationController
def create
@user = User.create(user_params)
FetchJob.perform_later(@user.id)
end
private
def user_params
....
end
end
Задания в очереди выполняются параллельно. Под заданиями в очереди я имею в виду задания1, задания2, задания3, задания4 и так далее. Так как я мог выполнить эти задания последовательно. т. е. только если задание завершено, он обработает задание2, затем задание3 и т. д. Как заблокировать его, пока работа не завершится в sidekiq?
1 ответ
Возможно, вы найдете хак, который позволит вам делать то, что вы хотите, но позвольте мне предложить кое-что еще: вы используете не тот инструмент. Sidekiq не предназначен для работы таким образом.