В чем разница между perform_later и perform_async?

#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.