Pense no fluxo de uma compra online. O usuário clica no botão "comprar". Se o seu sistema tentar reservar o produto, processar o pagamento no gateway de terceiros, gerar o pedido, disparar o e-mail e mandar um WhatsApp de confirmação — tudo na mesma requisição linear — você tem um problema estrutural sério. O usuário vai ficar encarando uma tela carregando até desistir ou o navegador dar timeout.
A arquitetura do pensamento aqui é ir direto ao ponto: nós precisamos tirar o que não é imediato da frente do usuário. O conceito de processos assíncronos existe justamente para isso. Você entrega a resposta rápida na tela e deixa o trabalho pesado rodando nos bastidores. Sem inflar sua stack com ferramentas e sem cair nas armadilhas de arquiteturas mirabolantes. No mundo Rails, resolvemos isso nativamente com o ActiveJob.
A Padronização com ActiveJob
Quem é das antigas sabe que o Rails nem sempre teve uma interface unificada para filas em background. Há alguns anos, se você usasse o Rescue, a sintaxe era uma. Se decidisse migrar para o Sidekiq por performance, precisava reescrever código na aplicação inteira. Era um engessamento que não fazia sentido.
A partir do Rails 5, recebemos o ActiveJob. Ele atua como um adaptador agnóstico. Assim como o Active Record nos permite trocar do MySQL para o PostgreSQL sem alterar a lógica de consultas, o ActiveJob permite trocar o motor de processamento das filas sem mudar uma linha do seu código de negócio.
Opções de adaptadores não faltam: Sidekiq, Delayed Job, Shoryuken. Mas a nossa escolha aqui foca na simplicidade. Vamos olhar para o Solid Queue. Em vez de exigir que você suba e monitore um servidor Redis apenas para gerenciar filas, o Solid Queue roda em cima do próprio banco de dados relacional. Menos dependência externa, deploy mais limpo, custo de infraestrutura menor.
Configurando o Solid Queue
Para trazer o Solid Queue para o seu projeto, a instalação vai direto ao ponto:
bundle add solid_queue
bin/rails solid_queue:install
bin/rails db:migrate
Ainda não há comentários. Seja o primeiro a comentar!