
Compartilhar:
Taylor é um ex-membro da equipe da Vonage (Nexmo). Ele é desenvolvedor web. Fundador do Laravel, do Forge, do Envoyer, do Spark e de outros projetos.
Notificações sobre o tempo de espera na fila com o Nexmo e o Laravel Horizon
As aplicações web precisam realizar tarefas que exigem muitos recursos computacionais e demoram muito tempo, como enviar e-mails, processar arquivos enviados ou chamar APIs. Realizar essas tarefas durante a solicitação web de um usuário pode fazer com que sua aplicação web pareça lenta e pesada, o que é frustrante para os usuários.
Assim, em vez de executar essas tarefas durante uma solicitação da web, elas podem ser adicionadas a uma fila de tarefas que será processada posteriormente por “workers” da fila. Por padrão, o framework Laravel inclui suporte para tarefas em fila e para iniciar workers para processá-las. Além disso, o pacote Laravel Horizon amplia o sistema de filas do Laravel, adicionando uma interface de usuário para monitoramento de filas, balanceamento de carga dos processadores e muito mais. O Horizon utiliza Redis, um poderoso banco de dados de código aberto, para rastrear tarefas pendentes, processadas e com falha, bem como métricas como o tempo médio de processamento das tarefas e o tempo de espera na fila.
No entanto, quando sua aplicação estiver utilizando filas em segundo plano, picos de tráfego podem fazer com que as tarefas se acumulem rapidamente na fila. Se você não tiver trabalhadores suficientes atribuídos a essa fila, as tarefas ficarão muito tempo na fila antes de serem processadas.
A Nexmo vem ao resgate! Ao aproveitar os eventos e serviços de notificação integrados ao Laravel Horizon, podemos configurar o Horizon para enviar uma mensagem SMS para o nosso celular quando o tempo de espera na fila ultrapassar um limite específico que definirmos.
Instalação e configuração do cliente Nexmo
Primeiro, vamos configurar o serviço Nexmo para nosso aplicativo. Os serviços de notificação do Laravel já contam com suporte integrado para o envio de mensagens SMS usando o Nexmo. No entanto, precisamos adicionar algumas linhas de configuração ao nosso config/services.php arquivo de configuração:
'nexmo' => [
'key' => env('NEXMO_KEY'),
'secret' => env('NEXMO_SECRET'),
'sms_from' => 'virtual-phone-number',
],
Depois que essas opções de configuração forem adicionadas ao seu config/services.php arquivo de configuração, certifique-se de que o NEXMO_KEY e NEXMO_SECRET sejam adicionadas ao arquivo de configuração do seu aplicativo .env . Esses valores de configuração podem ser obtidos nas configurações da sua conta Nexmo.
Além disso, o sms_from valor da configuração deve ser alterado para corresponder ao número de um dos seus números virtuais da Nexmo. Esse é o número de telefone do qual suas mensagens SMS serão enviadas.
Em seguida, precisamos instalar o nexmo/client pacote em nosso aplicativo usando o Composer. Podemos fazer isso usando o comando “composer require” em nosso terminal:
composer require nexmo/clientÓtimo! Já instalamos e configuramos o cliente Nexmo. Agora, vamos instalar o Horizon.
Instalação e configuração do Laravel Horizon
Para instalar o Laravel Horizon, usaremos o Composer para instalar o laravel/horizon pacote:
composer require laravel/horizonDepois que o Composer concluir a instalação do Horizon, precisamos publicar os arquivos de configuração do Horizon. Podemos fazer isso usando o vendor:publish Artisan do Laravel:
php artisan vendor:publish --provider="Laravel\Horizon\HorizonServiceProvider"O Horizon já está instalado! Mas, antes de prosseguir, você deve verificar se a default configuração do driver no seu config/queue.php arquivo de configuração esteja definida como redis.
Limites de tempo de espera de configuração
Em seguida, estamos prontos para configurar nosso limite de tempo de espera na fila. Se o tempo de espera na fila ultrapassar esse limite, queremos receber uma mensagem SMS nos alertando sobre a situação. A wait opção de configuração no config/horizon.php arquivo de configuração nos permite especificar o limite máximo de tempo de espera na fila em segundos. Por padrão, esse limite é definido em 60 segundos; no entanto, você pode modificar esse valor de acordo com as necessidades do seu aplicativo.
'waits' => [
'redis:default' => 60,
],
Configurando a notificação por SMS do Nexmo
Por fim, estamos prontos para configurar o Horizon para que ele realmente envie a mensagem SMS quando o limite de tempo de espera da fila for excedido. Dentro do boot método da classe Applications AppServiceProvider , vamos adicionar a seguinte linha de código:
\Laravel\Horizon\Horizon::routeSmsNotificationsTo(
'your-phone-number'
);É claro que your-phone-number deve ser substituído pelo número de telefone para o qual a notificação por SMS sobre o tempo de espera deve ser enviada.
É isso aí! Quando o tempo de espera na fila do nosso aplicativo for excedido, receberemos um SMS pelo Nexmo nos alertando sobre o tempo de espera prolongado. Em resposta, podemos aumentar rapidamente a capacidade dos nossos processadores de fila e resolver o problema!
Um aplicativo de demonstração que utiliza o Horizon e o Nexmo está disponível no meu GitHub.