Ubuntu 16.04에서 Beanstalk 및 Supervisor를 사용하여 Laravel 작업 대기열 관리

Beanstalk 는 빠르고 간단한 작업 대기열입니다. 이메일 전송, 외부 API 연결 또는 이미지 처리와 같이 시간이 많이 걸리는 작업을 비동기식으로 실행할 수 있습니다. 이렇게하면 웹앱 대기 시간이 줄어 듭니다. Laravel은에 대한 기본 지원을 제공합니다 beanstalkd.

이 튜토리얼에서는 beanstalkd데모 라 라벨 애플리케이션을 설치 , 설정하고 Supervisor를 통해 큐 워커를 관리 할 것 입니다. 데모 애플리케이션은 Vultr API 에서 사용 가능한 OS 목록을 가져 와서 임의로 선택합니다.

시스템에 Supervisor가 이미 설치되어 있다고 가정합니다. 그렇지 않으면 Supervisor 설정 방법에 대한 다음 자습서를 읽어야합니다 . Ubuntu 16.04에서 Supervisor 설치 및 구성

또한 Vultr 인스턴스에 대한 SSH 액세스 권한이 있다고 가정합니다.

Beanstalk 설치

첫 번째 단계는 설치하는 것 beanstalkd입니다.

sudo apt-get update
sudo apt-get install beanstalkd

서비스를 시작하십시오.

sudo systemctl start beanstalkd

시스템 초기화시 서비스가 시작되도록 할 수도 있습니다.

sudo systemctl enable beanstalkd

다음 명령을 실행하여 서비스 상태를 확인하십시오.

sudo systemctl status beanstalkd

기본적으로 beanstalkd포트 에서 수신 대기합니다 11300. Beanstalk는 github repository에 설명 된 간단한 텍스트 기반 프로토콜을 사용 합니다 . 를 실행하여 프로토콜을 테스트 할 수 있습니다 telnet.

telnet localhost 11300

다음을 작성하고를 누르십시오 ENTER.

list-tubes

서버에서 사용 가능한 튜브 목록이 표시되어야합니다.

OK 14
---
- default

연결을 닫으려면 간단히 입력 quit한 다음를 누릅니다 ENTER.

Beanstalk의 튜브는 작업 큐를 나타냅니다. Beanstalk는 기본적으로 생산자 , 소비자 , 작업튜브로 구성 됩니다. 생산자는 작업을 튜브에 넣어 여러 소비자가 소비 (처리)합니다. 생산자와 소비자는 단순히 Beanstalk 서버의 클라이언트이며 서로 독립적입니다. 실제로 이것은 Beanstalk를 사용하여 PHP 응용 프로그램에서 작업을 생성하고 예를 들어 NodeJS 응용 프로그램에서 처리 할 수 ​​있음을 의미합니다. 다행스럽게도 라 라벨은이 모든 것을 추상화하고 다음에 볼 수 있듯이 작업을 디스패치하고 처리 할 수있는 매우 간단한 API를 제공합니다.

샘플 프로젝트

샘플 프로젝트를 빌드하려면 먼저 종속성을 설치해야합니다. 우리는 PHP와 Composer를 설치할 것입니다.

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

이제 Laravel 5.5를 기반으로 프로젝트를 생성하십시오.

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

다음으로 cd최근에 생성 된 폴더에. 앞으로이 디렉토리에서 작업 할 것입니다. 이 폴더는 나중에로 참조 될 수 있습니다 PROJECT_ROOT.

cd vultr/

Laravel에서 Beanstalk를 사용하려면 PHP Beanstalk 클라이언트라는 추가 종속성을 설치해야합니다.

composer require pda/pheanstalk ~3.0

또한 작업 표현을 작성해야합니다. 라 라벨에서 이것은 app/Jobs폴더 안의 클래스 입니다. Laravel에는 Job 클래스를 생성하는 데 도움이되는 콘솔 명령이 있습니다. 샘플 작업을 만들어 봅시다.

php artisan make:job FindFavoriteOS

app/Jobs/FindFavoriteOS.php파일을 다음으로 업데이트하십시오 .

<?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']);
    }
}

handle 메소드는 작업이 사용될 때 효과적으로 실행될 것입니다. 여기에서는 Vultr API에서 데이터를 가져 와서 임의로 OS를 선택하고 선택한 OS를 로그 파일에 씁니다. 로그 파일은에 있습니다 storage/logs/laravel.log.

우리는 이미 Beanstalk를 설치했고 그에 의해 실행되도록 작업을 정의했습니다. 이제 Beanstalk를 기본 작업 대기열로 사용하도록 Laravel에 지시해야합니다. .envLaravel 설치에서 제공 한 기본 파일을 복사하십시오 .

cp .env.example .env

이제 .env파일을 열고 큐 드라이버가 지정된 행을 업데이트하십시오.

QUEUE_DRIVER=beanstalkd

마지막으로 응용 프로그램 키를 생성하십시오.

php artisan key:generate

이제 Beanstalk 작업 큐에 작업을 디스패치 할 준비가되었습니다.

작업 파견 및 실행

라 라벨에서 일자리를 파견하는 것은 매우 간단합니다. routes/web.php파일을 업데이트 하십시오.

<?php

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

    return '50 Jobs dispatched!';
});

프로덕션 환경에서 기본 제공 제공 서버를 실행하는 것은 권장되지 않지만 여기서는 간결성을 위해 여기에서 사용합니다.

php artisan serve --host 0.0.0.0 --port 8000

이제 웹 브라우저에서로 이동하십시오 http://[vultr-instance-ip]:8000. 다음과 같은 메시지가 나타납니다.

50 Jobs dispatched!

서버와 프로젝트 루트 내부에 새 SSH 연결을 열고 다음을 실행하십시오.

php artisan queue:work --once

이것은 예상되는 출력입니다.

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

로그가 생성되었는지 확인하십시오.

cat storage/logs/laravel.log

감독자 구성

대기열을 수동으로 처리 할 필요가 없도록을 사용 supervisord합니다. 에서 다음 프로그램 구성을 작성하십시오 /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

Supervisor 구성 파일을 넣는 올바른 경로는 설정에 따라 다릅니다. 또한 시스템 [PROJECT_ROOT]의 전체 경로 로 교체 PROJECT_ROOT해야합니다.

여기에서는 큐 처리를 자동으로 시작하고 스크립트가 중단 된 경우 다시 시작하도록 Supervisor를 구성합니다. 또한 단일 작업자가 아닌 8 개의 프로세스를 인스턴스화하고 있습니다. 응용 프로그램에 따라 필요한 많은 프로세스를 자유롭게 인스턴스화 할 수 있습니다.

Supervisor가 작업자를 관리 할 수 ​​있도록 강제로 구성을 다시 읽습니다.

sudo supervisorctl reread
sudo supervisorctl update

Supervisor 서비스가 시작되지 않은 경우 많은 사람들이이를 시작해야합니다.

sudo systemctl start supervisord

이제 작업이 처리되는지 확인하십시오.

tail -f storage/logs/laravel.log

웹 브라우저에서로 이동하십시오 http://[vultr-instance-ip]:8000. 콘솔에서 로그가 생성되는 것을 볼 수 있습니다.

결론

Beanstalk를 작업 대기열로 사용하도록 Laravel 응용 프로그램을 성공적으로 구성했습니다. 또한 Supervisor를 사용하여 작업자를 관리하는 방법을 시연했습니다.



AI가 랜섬웨어 공격의 증가와 싸울 수 있습니까?

AI가 랜섬웨어 공격의 증가와 싸울 수 있습니까?

랜섬웨어 공격이 증가하고 있지만 AI가 최신 컴퓨터 바이러스를 처리하는 데 도움이 될 수 있습니까? AI가 답인가? AI boone 또는 bane인지 여기에서 읽으십시오.

ReactOS: 이것이 Windows의 미래입니까?

ReactOS: 이것이 Windows의 미래입니까?

오픈 소스이자 무료 운영 체제인 ReactOS가 최신 버전과 함께 제공됩니다. 현대 Windows 사용자의 요구 사항을 충족하고 Microsoft를 무너뜨릴 수 있습니까? 이 구식이지만 더 새로운 OS 환경에 대해 자세히 알아보겠습니다.

WhatsApp 데스크톱 앱 24*7을 통해 연결 유지

WhatsApp 데스크톱 앱 24*7을 통해 연결 유지

Whatsapp은 마침내 Mac 및 Windows 사용자용 데스크톱 앱을 출시했습니다. 이제 Windows 또는 Mac에서 Whatsapp에 쉽게 액세스할 수 있습니다. Windows 8 이상 및 Mac OS 10.9 이상에서 사용 가능

AI는 어떻게 프로세스 자동화를 다음 단계로 끌어올릴 수 있습니까?

AI는 어떻게 프로세스 자동화를 다음 단계로 끌어올릴 수 있습니까?

인공 지능이 소규모 회사에서 어떻게 인기를 얻고 있으며 어떻게 인공 지능이 성장할 가능성을 높이고 경쟁자가 우위를 점할 수 있는지 알아보려면 이 기사를 읽으십시오.

macOS Catalina 10.15.4 추가 업데이트로 인해 해결보다 더 많은 문제가 발생함

macOS Catalina 10.15.4 추가 업데이트로 인해 해결보다 더 많은 문제가 발생함

최근 Apple은 문제를 해결하기 위해 macOS Catalina 10.15.4 추가 업데이트를 출시했지만 이 업데이트로 인해 Mac 컴퓨터의 브릭킹으로 이어지는 더 많은 문제가 발생하는 것 같습니다. 자세히 알아보려면 이 기사를 읽어보세요.

빅데이터의 13가지 상용 데이터 추출 도구

빅데이터의 13가지 상용 데이터 추출 도구

빅데이터의 13가지 상용 데이터 추출 도구

저널링 파일 시스템이란 무엇이며 어떻게 작동합니까?

저널링 파일 시스템이란 무엇이며 어떻게 작동합니까?

우리 컴퓨터는 모든 데이터를 저널링 파일 시스템이라고 하는 체계적인 방식으로 저장합니다. 검색을 누르는 즉시 컴퓨터에서 파일을 검색하고 표시할 수 있는 효율적인 방법입니다.https://wethegeek.com/?p=94116&preview=true

기술적 특이점: 인류 문명의 먼 미래?

기술적 특이점: 인류 문명의 먼 미래?

과학이 빠른 속도로 발전하고 우리의 많은 노력을 인수함에 따라 설명할 수 없는 특이점에 처할 위험도 높아집니다. 특이점이 우리에게 무엇을 의미할 수 있는지 읽어보십시오.

26가지 빅 데이터 분석 기법에 대한 통찰: 1부

26가지 빅 데이터 분석 기법에 대한 통찰: 1부

26가지 빅 데이터 분석 기법에 대한 통찰: 1부

2021년 의료 분야에서 인공 지능의 영향

2021년 의료 분야에서 인공 지능의 영향

의료 분야의 AI는 지난 수십 년 동안 큰 도약을 했습니다. 따라서 의료 분야에서 AI의 미래는 여전히 나날이 성장하고 있습니다.