Как последовательно обрабатывать очереди в 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 не предназначен для работы таким образом.

https://github.com/mperham/sidekiq/wiki/Best-Practices

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