Фото: Lewis Kang'ethe Ngugi на Unsplash
У частині-I ми успішно створили першу задачу Sidekiq і додали її до черги. Тепер настав час подивитись, як Sidekiq обробляє ці задачі та розглянути додаткові функціональності!
Обробка задач
Ми запустили воркер Sidekiq на попередньому кроці за допомогою команди bundle exec sidekiq
. Ця команда інструктує Sidekiq постійно моніторити Redis чергу на наявність нових задач і обробляти їх по черзі.
За замовчуванням, Sidekiq використовує процес з одним воркером. Це означає, що він може обробляти лише одну задачу за раз. Якщо у вас є велика кількість фоновых задач, варто розглянути запуск декількох процесів воркерів для покращення продуктивності. Ви можете легко досягти цього, вказавши кількість воркерів при запуску Sidekiq:
bundle exec sidekiq -c 4
Ця команда запустить чотири процеси воркерів Sidekiq, дозволяючи обробляти до чотирьох задач одночасно.
Web UI Sidekiq
Sidekiq надає веб-інтерфейс для моніторингу та керування фоновими задачами. Щоб активувати веб-інтерфейс, потрібно додати гем sidekiq-ui
до вашого Gemfile і виконати bundle install
.
gem 'sidekiq-ui'
Після установки гему, перезапустіть сервер Rails і воркер Sidekiq. Тепер ви можете отримати доступ до веб-інтерфейсу Sidekiq, перейшовши за адресою http://localhost:3000/sidekiq
у вашому веб-браузері.
Веб-інтерфейс надає в реальному часі інформацію про ваші фонові задачі, включаючи:
- Кількість задач у черзі, що обробляються та не вдалися.
- Деталі кожної задачі, такі як її ім’я класу, аргументи та спроби повторення.
- Можливість повторити не вдалися задачі або видалити їх з черги.
Повторна обробка не вдалися задач
Можуть бути ситуації, коли задача не виконується через непередбачувані помилки. Sidekiq надає вбудований механізм повторної обробки для таких ситуацій. За замовчуванням, Sidekiq повторює не вдалися задачі п’ять разів з експоненційним збільшенням часу між спробами. Це означає, що інтервал часу між спробами збільшується після кожної невдалої спроби.
Ви можете налаштувати поведінку повторної обробки для конкретної задачі, перевизначивши метод retry_in
у класі вашої задачі. Ось приклад:
class MyImportantJob
include Sidekiq::Job
def perform(args)
# Логіка задачі
raise "Щось пішло не так!"
end
retry_in 60 * 10, queue: :critical # Повторити задачу через 10 хвилин в критичній черзі
end
У цьому прикладі ми перевизначили метод retry_in
, щоб повторити не вдалу задачу через 10 хвилин у черзі critical
. Ви можете вказати інший час повтору або навіть іншу чергу для повторної обробки задачі.
Черги Sidekiq
За замовчуванням, Sidekiq використовує одну чергу з назвою default
для всіх фонових задач. Однак, Sidekiq дозволяє визначити кілька черг для пріоритетного оброблення різних типів задач. Наприклад, ви можете мати чергу critical
для термінових задач, які потрібно обробити якомога швидше, і чергу low
для менш важливих задач, які можуть бути оброблені з нижчим пріоритетом.
MyCriticalJob.perform_async(args).enqueue(:critical)
Це додасть задачу до черги critical
. Воркер Sidekiq обробляє задачі з різних черг залежно від їх пріоритету. За замовчуванням, черга default
має найвищий пріоритет.
Висновок
У цьому двочастинному підручнику ми розглянули основи Sidekiq, включаючи створення задач, їх обробку за допомогою воркерів і керування ними через веб-інтерфейс. Також ми коротко обговорили повтори та черги, щоб дати вам краще розуміння того, як ефективно обробляти різні сценарії задач.
Сподіваюся, цей підручник був корисним! Не соромтеся досліджувати документацію Sidekiq для більш просунутих функцій та можливостей.
Перекладено з: Sidekiq — Part II: Processing Jobs and More!