#ruby-on-rails #sidekiq
#ruby-on-rails #sidekiq
Вопрос:
Согласно документам ActiveJob для постановки задания в очередь, которое я должен использовать perform_later
. Документы Sidekiq реализуют perform_async
, но часть документов ActiveJob предлагает использовать perform_later
. Я использовал perform_async
ранее в Rails, так они чем-то отличаются или это просто соглашение?
Ответ №1:
ActiveJob — это оболочка вокруг наиболее известных фоновых заданий, предоставляющая базовый API для работы с фоновыми заданиями.
ActiveJob определяет perform_later
. Sidekiq определяет perfom_async
. Какой метод вы используете, зависит от того, как вы внедряете своих работников. Если вы используете ActiveJob workers, то вы должны использовать perform_later
, если вы не используете ActiveJob и просто используете простые Sidekiq workers, тогда используйте perform_async
.
Комментарии:
1. Рекомендуется ли один способ реализации workers вместо другого?
perform_async
Предоставляет ли что-то, чегоperform_later
нет? Я полагаю, что если бы мне нужно было перейти с Sidekiq на другой сервер очереди, тоperform_later
это был бы лучший выбор.2. Я не уверен, что оба метода эквивалентны на 100%, поскольку код отличается, но я предполагаю, что у вас будут почти те же функции. Не переусердствуйте, если вам нужно что-то из
perform_async
того, что не предусмотреноperform_later
, вы наверняка сможете реализовать то, что вам нужно. Рекомендуется использовать ActiveJob, вам не нужно беспокоиться о методе фоновой обработки, просто кодируйте с одним интерфейсом и меняйте поставщика. Конечно, вы могли бы просто использовать Sidekiq без ActiveJob в середине, но это было бы проблемой в будущем, если вам нужно перейти на другой метод обработки.3. Вы даже можете реализовать workers с помощью ActiveJob, а другие — с помощью простого Sidekiq, если вам действительно нужна какая-то специальная функция, доступная только для Sidekiq.