Как приложение Rails 6 может использовать Sidekiq+Redis для Hotwire/Stimulus, но DelayedJob для рабочих заданий, таких как электронные письма

Для всех наших приложений Rails мы используем DelayedJob для критически важных рабочих заданий (отправка электронных писем и т. д.), потому что для этих заданий нам нужны задания в нашем основном хранилище БД postgres для простоты административной проверки, запросов, отладки, сохранения и ручных повторных попыток, если/когда нужный. DelayedJob имеет достаточную производительность для таких типов заданий.

Но мы также хотим начать использовать Hotwire, для которого, как я понимаю, требуется ActionCable, для которого требуются ActiveJobs и который выигрывает от дополнительной скорости обработки заданий, обеспечиваемой в памяти Sidekiq+Redis, где постоянство и идемпотентность не требуются.

Есть ли способ использовать ActiveJob в качестве системы заданий как для рабочих заданий на основе DelayedJob, так и для заданий ActionCable на основе Sidekiq?

Или использование Sidekiq для Hotwire/ActionCable требует от наших рабочих заданий на основе DelayedJob отказаться от использования ActiveJob (и, следовательно, использовать собственные задания DelayedJob)?


person jpw    schedule 29.05.2021    source источник


Ответы (1)


У вас может быть несколько бэкэндов заданий.

 class HotwireActionCableJob < ApplicationJob
   self.queue_adapter = :sidekiq
   # broadcast/stream something through action cable 
 end

 class SomeOtherJob < ApplicationJob
   self.queue_adapter = :delayed_job
 end

Или использование Sidekiq для Hotwire/ActionCable требует, чтобы наши рабочие задания на основе DelayedJob отказывались от использования ActiveJob (и, следовательно, использовали собственные задания DelayedJob)?

Я думаю, что вы можете использовать ActiveJob везде и просто указать адаптер в классе задания.

person Joel Blum    schedule 29.05.2021