Agendador de requisições em Paralelo com Sidekiq e Redis
Parece um grande mistério como o Sidekiq trabalha, mas nessa vida de códigos obscuros teremos sempre desbravadores que iram instalar e ligar os refletores para que tudo seja mais “claro”.
Então, vamos lá, que acendam as luzes!
O Sidekiq nada mais é que um agendador de tarefas opensource escrito na melhor linguagem do mundo, adivinha qual? Ruby, claro!
Sabe aquele relatório que demora muito para carregar ao ponto da requisição retornar timeout? Ou então aquele processamento de várias linhas que precisa ser executado e que a requisição ficará presa?
É ai que entra o Sidekiq, com ele você pode solicitar execuções de tarefas ou agendar sua execução para ocorrer em um determinado dia/hora, e ele se encarregará de executar. O Rails, a partir da versão 5, já trás a implementação dos jobs, definido como:
“uma estrutura para declarar trabalhos e fazê-los executar em uma variedade de back-ends de filas” (Doc Rails)
No code, implementaremos os jobs, que representam os trabalhos e configuraremos a aplicação para que esse gerenciamento seja por conta do Sidekiq (que responsa!).
Porém, o Sidekiq precisa de um banco de dados para armazenar as tarefa que serão executadas ou que estão agendadas para executar. É então que entra em cena o Redis, banco de dados não relacional que armazenará tais informações. Poucos sabem, mas eles são brothers .
Para começarmos a usar, primeiramente, precisamos instalar o Redis, para (nós) os amantes de Linux, segue o script:
sudo apt install redis-server
Após instalar o Redis, precisamos configurar o cable.yml do projeto raiz para que ele consiga enxergar o pequeno Redis, o arquivo se encontra dentro de config do projeto raiz. Em seguida, alteraremos para que o ambiente de development tenha as seguintes informações:
development:
adapter: redis
url: redis://localhost:6379/1
É importante verificar se o projeto raiz já contem a menção das gems do Redis e Sidekiq, como ilustrado abaixo:
gem 'redis'
gem 'sidekiq'
Para desencargo de consciência, execute o comando bundle install para verificar/instalar as dependências.
Outra configuração que precisa está presente no projeto raiz é a definição do gerenciamento dos jobs do Rails, no qual será executado pelo Sidekiq. Essa configuração está presente dentro de config/application.rb, como ilustrado abaixo:
config.active_job.queue_adapter = :sidekiq
Com tais configurações realizadas, é hora de subir o servidor do Sidekiq (no terminal dentro da pasta do projeto raiz), a partir do comando abaixo:
bundle exec sidekiq
É muito importante lembrar que ao subir o servidor do Sidekiq o projeto será compilado e mantido em memória para execução, caso haja alguma alteração no código do job, ações, views ou componentes utilizados ou instanciados por ele, sempre será necessário recarregá-lo. Utilize o comando abaixo para desligar o servidor do Sidekiq.
Ctrl + C
Tudo pronto, agora você já pode “codar” seus jobs!