DEV Community

Luis Porras for WebdoxCLM

Posted on

Corre tus tareas recurrentes con Sidekiq

En Webdox utilizamos Sidekiq como nuestra plataforma para procesar tareas asíncronas. Sidekiq utiliza hilos (threads) para manejar varias tareas al mismo tiempo en un mismo proceso.

Tenemos muchas tareas que ejecutamos de forma asíncrona con Sidekiq, por ejemplo: El envío de notificaciones por correo, la reindexación de contratos, la generación masiva de contratos y el inicio de la firma electrónica de cada contrato masivo, etc

Sidekiq se puede usar de forma gratuita y de forma paga. Cuando usamos la forma gratuita hay ciertas funcionalidades que no se incluyen y una de estas es ejecutar CRON JOBS. Con esta funcionalidad podríamos tomar una tarea de Sidekiq y ejecutarla recurrentemente cada cierto tiempo con Cron jobs

Afortunadamente existen Gemas que funcionan como plugins de Sidekiq y en Webdox utilizamos una para ejecutar tareas recurrentes de forma gratuita, su nombre es Sidekiq Scheduler

A continuación un pequeño tutorial de cómo utilizar Sidekiq Scheduler

Instalación y Configuración

Agregamos la gema en nuestro Gemfile

# Gemfile
gem 'sidekiq-scheduler'
Enter fullscreen mode Exit fullscreen mode

y Ejecutamos:

bundle install
Enter fullscreen mode Exit fullscreen mode

Creamos un Worker de Sidekiq el cual se ejecutará cada cierto tiempo.

hello_world_worker.rb

require 'sidekiq-scheduler'

class HelloWorldWorker
  include Sidekiq::Worker

  def perform
    puts 'Hello world'
  end
end
Enter fullscreen mode Exit fullscreen mode

Para configurar la periodicidad del Worker modificamos el archivo de configuración de Sidekiq, un apartado de Scheduler:

# config/sidekiq.yml

:schedule:
  hello_world:
    cron: '0 * * * * *'   # Runs once per minute
    class: HelloWorldWorker
Enter fullscreen mode Exit fullscreen mode

Y corremos Sidekiq:

bundle exec sidekiq -C config/sidekiq.yml
Enter fullscreen mode Exit fullscreen mode

Una vez iniciado Sidekiq veremos como se imprime "Hello world" cada minuto.

2021-06-07T15:54:38.710Z 62465 TID-ownzi9r98 INFO: Running in ruby 2.6.3p62 (2019-04-16 revision 67580) [x86_64-darwin20]
2021-06-07T15:54:38.710Z 62465 TID-ownzi9r98 INFO: See LICENSE and the LGPL-3.0 for licensing details.
2021-06-07T15:54:38.710Z 62465 TID-ownzi9r98 INFO: Upgrade to Sidekiq Pro for more features and support: http://sidekiq.org
2021-06-07T15:54:38.723Z 62465 TID-ownzi9r98 INFO: Loading Schedule
2021-06-07T15:54:38.723Z 62465 TID-ownzi9r98 INFO: Schedule empty! Set Sidekiq.schedule
2021-06-07T15:54:38.724Z 62465 TID-ownzi9r98 INFO: Schedules Loaded
2021-06-07T15:54:38.734Z 62465 TID-ownzi9r98 INFO: Reloading Schedule
2021-06-07T15:54:38.734Z 62465 TID-ownzi9r98 INFO: Loading Schedule
2021-06-07T15:54:38.790Z 62465 TID-ownzi9r98 INFO: Scheduling hello_world {"cron"=>"0 * * * * *", "class"=>"HelloWorldWorker", "queue"=>"default"}
2021-06-07T15:54:38.791Z 62465 TID-ownzi9r98 INFO: Schedules Loaded
2021-06-07T15:54:38.791Z 62465 TID-ownzi9r98 INFO: Starting processing, hit Ctrl-C to stop
2021-06-07T15:59:37.940Z 62990 TID-ov0v1hmpo HelloWorldWorker JID-4a465f9e9646157552de7f5c INFO: start
Hello world
2021-06-07T15:59:37.940Z 62990 TID-ov0v1hmpo HelloWorldWorker JID-4a465f9e9646157552de7f5c INFO: done: 0.0 sec
2021-06-07T15:59:37.940Z 62990 TID-ov0v1hmpo HelloWorldWorker JID-64dc6b6cb06ebf580c3faae6 INFO: start
Hello world
2021-06-07T15:59:37.940Z 62990 TID-ov0v1hmpo HelloWorldWorker JID-64dc6b6cb06ebf580c3faae6 INFO: done: 0.0 sec
Enter fullscreen mode Exit fullscreen mode

Además tenemos la opción de visualizar las tareas recurrentes en el panel de administración de Sidekiq si realizamos la siguiente configuración:

# config.ru

require 'sidekiq/web'
require 'sidekiq-scheduler/web'

run Sidekiq::Web
Enter fullscreen mode Exit fullscreen mode

Alt Text

Por último recomendamos utilizar la página CronTabGurú para cuando necesitemos configurar la periodicidad de las tareas recurrentes con la sintaxis de Cron Jobs.

Tener en cuenta que la sintaxis de cron jobs que utiliza Sidekiq Scheduler tiene una sección extra en la parte de adelante la cual nos permite configurar los segundos.

Top comments (1)

Collapse
 
sturpin profile image
Sergio Turpín

Buen artículo 😉