Gerenciando filas de trabalho do Laravel com Beanstalk e Supervisor no Ubuntu 16.04

Beanstalk é uma fila de trabalho rápida e simples. Permite executar tarefas demoradas de forma assíncrona, como enviar e-mails, conectar-se a APIs externas ou processar imagens. Ao fazer isso, você reduzirá a latência do aplicativo da web. O Laravel fornece suporte pronto para uso beanstalkd.

Neste tutorial, instalaremos beanstalkd, configuraremos um aplicativo demo do Laravel e gerenciaremos os trabalhadores da fila por meio do Supervisor . O aplicativo de demonstração obterá uma lista de sistemas operacionais disponíveis na API Vultr e escolherá aleatoriamente um.

Supõe-se que você já tenha o Supervisor instalado no seu sistema. Caso contrário, leia o seguinte tutorial sobre como instalar o Supervisor: Instalando e configurando o Supervisor no Ubuntu 16.04

Também se supõe que você tenha acesso SSH à sua instância do Vultr.

Instalando o Beanstalk

O primeiro passo a tomar é instalar beanstalkd.

sudo apt-get update
sudo apt-get install beanstalkd

Inicie o serviço.

sudo systemctl start beanstalkd

Você também pode ativar o serviço para iniciar na inicialização do sistema.

sudo systemctl enable beanstalkd

Verifique o status do serviço emitindo o seguinte comando.

sudo systemctl status beanstalkd

Por padrão, beanstalkdescuta na porta 11300. O Beanstalk usa um protocolo simples baseado em texto descrito em seu repositório github . Você pode testar seu protocolo executando telnet.

telnet localhost 11300

Escreva o seguinte e pressione ENTER.

list-tubes

Você deve ver uma lista de tubos disponíveis no servidor:

OK 14
---
- default

Para fechar a conexão, basta digitar quite pressionar ENTER.

Os tubos no Beanstalk representam filas de trabalho. Beanstalk é composto basicamente por produtores , consumidores , empregos e tubos . Os produtores colocam os trabalhos em um tubo para serem consumidos (processados) por qualquer número de consumidores. Observe que produtores e consumidores são simplesmente clientes do servidor Beanstalk e são totalmente independentes um do outro. Em termos práticos, isso significa que, usando o Beanstalk, você pode produzir seus trabalhos em seu aplicativo PHP e processá-los em um aplicativo NodeJS, por exemplo. Felizmente, o Laravel abstrai tudo isso e nos fornece uma API muito simples para despachar e manipular tarefas, como veremos a seguir.

Projeto de exemplo

Para criar nosso projeto de amostra, primeiro precisamos instalar suas dependências. Vamos instalar o PHP e o Composer.

sudo apt-get install php php-mbstring php-xml php-common php-zip composer

Agora, crie o projeto baseado no Laravel 5.5.

composer create-project --prefer-dist laravel/laravel vultr "5.5.*"

Avançar cdpara a pasta criada recentemente. Nós estaremos trabalhando neste diretório a partir de agora. Esta pasta pode ser referenciada posteriormente como PROJECT_ROOT.

cd vultr/

Para usar o Beanstalk no Laravel, precisamos instalar mais uma dependência, o cliente PHP Beanstalk.

composer require pda/pheanstalk ~3.0

Também precisamos criar uma representação de trabalho. No Laravel, essa é uma classe dentro da app/Jobspasta. O Laravel possui um comando de console para nos ajudar a criar uma classe Job. Vamos criar nosso trabalho de amostra.

php artisan make:job FindFavoriteOS

Atualize o app/Jobs/FindFavoriteOS.phparquivo para o seguinte.

<?php

namespace App\Jobs;

use Illuminate\Bus\Queueable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Support\Facades\Log;

class FindFavoriteOS implements ShouldQueue
{
    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

    /**
     * Create a new job instance.
     *
     * @return void
     */
    public function __construct()
    {
        //
    }

    /**
     * Execute the job.
     *
     * @return void
     */
    public function handle()
    {
        $rawData = file_get_contents('https://api.vultr.com/v1/os/list');
        $list = json_decode($rawData, true);
        shuffle($list);
        $key = array_rand($list);
        $favorite = $list[$key];
        Log::info('My Favorite OS is: ' . $favorite['name']);
    }
}

O método handle é o que será efetivamente executado quando o trabalho for consumido. Aqui, buscamos dados da API do Vultr, escolhemos aleatoriamente um sistema operacional e gravamos o sistema operacional escolhido no arquivo de log. O arquivo de log está localizado em storage/logs/laravel.log.

Já instalamos o Beanstalk e definimos o trabalho a ser executado por ele. Agora é hora de dizer ao Laravel para usar o Beanstalk como a fila de trabalho padrão. Copie o .envarquivo padrão fornecido pela instalação do Laravel.

cp .env.example .env

Agora abra o .envarquivo e atualize a linha em que o driver da fila está especificado.

QUEUE_DRIVER=beanstalkd

Por fim, gere uma chave do aplicativo.

php artisan key:generate

Agora estamos prontos para enviar tarefas para a fila de trabalho do Beanstalk.

Despachando e executando trabalhos

Despachar um emprego no Laravel é bastante simples. Atualize o routes/web.phparquivo.

<?php

Route::get('/', function () {
    for ($i = 0; $i < 50; $i++) {
        \App\Jobs\FindFavoriteOS::dispatch();
    }

    return '50 Jobs dispatched!';
});

Apesar de não ser recomendado para executar o servidor interno fornecido em produção, o usaremos aqui por uma questão de brevidade.

php artisan serve --host 0.0.0.0 --port 8000

Agora, em um navegador da web, navegue até http://[vultr-instance-ip]:8000. Você verá a seguinte mensagem.

50 Jobs dispatched!

Abra uma nova conexão SSH no seu servidor e, dentro da raiz do nosso projeto, execute o seguinte.

php artisan queue:work --once

Esta é a saída esperada:

[2018-02-14 00:03:52] Processing: App\Jobs\FindFavoriteOS
[2018-02-14 00:03:53] Processed:  App\Jobs\FindFavoriteOS

Confirme se o log foi gerado.

cat storage/logs/laravel.log

Supervisor de configuração

Para evitar a necessidade de processar manualmente a fila, usaremos supervisord. Crie a seguinte configuração de programa em /etc/supervisor/conf.d/vultr.conf.

[program:vultr]
process_name=%(program_name)s_%(process_num)02d
command=php [PROJECT_ROOT]/artisan queue:work
autostart=true
autorestart=true
numprocs=8
redirect_stderr=true
stdout_logfile=/var/log/worker.log

Observe que o caminho certo para colocar o arquivo de configuração do Supervisor dependerá da sua configuração. Além disso, lembre-se de substituir [PROJECT_ROOT]o caminho completo para o PROJECT_ROOTsistema.

Aqui estamos configurando o Supervisor para iniciar automaticamente o processamento da fila e, no caso de quebra do script, para reiniciá-la. Observe também que não estamos instanciando um único trabalhador, mas 8 processos. Você pode instanciar os processos que achar necessários, dependendo da sua aplicação.

Para permitir que o Supervisor gerencie nosso trabalhador, force-o a reler sua configuração.

sudo supervisorctl reread
sudo supervisorctl update

Se o serviço Supervisor não foi iniciado, você precisará iniciá-lo.

sudo systemctl start supervisord

Agora vamos ver se os trabalhos estão sendo processados.

tail -f storage/logs/laravel.log

Em um navegador da web, navegue para http://[vultr-instance-ip]:8000. Você verá os logs sendo gerados no seu console.

Conclusão

Configuramos com sucesso um aplicativo Laravel para usar o Beanstalk como uma fila de trabalho. Além disso, demonstramos como usar o Supervisor para gerenciar trabalhadores.



Leave a Comment

A IA pode lutar contra o aumento do número de ataques de ransomware

A IA pode lutar contra o aumento do número de ataques de ransomware

Os ataques de ransomware estão aumentando, mas a IA pode ajudar a lidar com os vírus de computador mais recentes? AI é a resposta? Leia aqui para saber se é AI boone ou bane

ReactOS: Este é o futuro do Windows?

ReactOS: Este é o futuro do Windows?

ReactOS, um sistema operacional de código aberto e gratuito está aqui com a versão mais recente. Será que ela pode atender às necessidades dos usuários modernos do Windows e derrubar a Microsoft? Vamos descobrir mais sobre esse estilo antigo, mas uma experiência de sistema operacional mais recente.

Fique conectado por meio do aplicativo WhatsApp Desktop 24 * 7

Fique conectado por meio do aplicativo WhatsApp Desktop 24 * 7

O Whatsapp finalmente lançou o aplicativo Desktop para usuários de Mac e Windows. Agora você pode acessar o Whatsapp do Windows ou Mac facilmente. Disponível para Windows 8+ e Mac OS 10.9+

Como a IA pode levar a automação de processos ao próximo nível?

Como a IA pode levar a automação de processos ao próximo nível?

Leia isto para saber como a Inteligência Artificial está se tornando popular entre as empresas de pequena escala e como está aumentando as probabilidades de fazê-las crescer e dar vantagem a seus concorrentes.

A atualização do suplemento do macOS Catalina 10.15.4 está causando mais problemas do que resolvendo

A atualização do suplemento do macOS Catalina 10.15.4 está causando mais problemas do que resolvendo

Recentemente, a Apple lançou o macOS Catalina 10.15.4, uma atualização suplementar para corrigir problemas, mas parece que a atualização está causando mais problemas, levando ao bloqueio de máquinas mac. Leia este artigo para saber mais

13 Ferramentas de Extração de Dados Comerciais de Big Data

13 Ferramentas de Extração de Dados Comerciais de Big Data

13 Ferramentas de Extração de Dados Comerciais de Big Data

O que é um sistema de arquivos de registro no diário e como ele funciona?

O que é um sistema de arquivos de registro no diário e como ele funciona?

Nosso computador armazena todos os dados de uma maneira organizada conhecida como sistema de arquivos Journaling. É um método eficiente que permite ao computador pesquisar e exibir arquivos assim que você clicar em search.https: //wethegeek.com/? P = 94116 & preview = true

Singularidade tecnológica: um futuro distante da civilização humana?

Singularidade tecnológica: um futuro distante da civilização humana?

À medida que a ciência evolui em um ritmo rápido, assumindo muitos de nossos esforços, os riscos de nos sujeitarmos a uma singularidade inexplicável também aumentam. Leia, o que a singularidade pode significar para nós.

Uma visão sobre 26 técnicas analíticas de Big Data: Parte 1

Uma visão sobre 26 técnicas analíticas de Big Data: Parte 1

Uma visão sobre 26 técnicas analíticas de Big Data: Parte 1

O impacto da inteligência artificial na saúde 2021

O impacto da inteligência artificial na saúde 2021

A IA na área da saúde deu grandes saltos nas últimas décadas. Portanto, o futuro da IA ​​na área da saúde ainda está crescendo dia a dia.