Инсталирање Беансталк-а
Пример пројекта
Распоређивање и вођење послова
Конфигурисање Супервизора
Закључак
Беансталк је брз и једноставан радни ред. Омогућава вам да асинхроно извршавате задатке који одузимају време, као што је слање е-поште, повезивање са спољним АПИ-јима или обрада слика. На тај начин ћете смањити кашњење веб апликације. Ларавел обезбеђује готову подршку за beanstalkd.
У овом beanstalkdводичу ћемо инсталирати , подесити демо Ларавел апликацију и управљати радницима у реду преко Супервизора . Демо апликација ће добити листу доступних ОС-а од Вултр АПИ-ја и насумично изабрати један.
Претпоставља се да већ имате инсталиран Супервизор на вашем систему. Ако то не учините, требало би да прочитате следећи водич о томе како да подесите Супервисор: Инсталирање и конфигурисање Супервизора на Убунту 16.04
Такође се претпоставља да имате ССХ приступ вашој Вултр инстанци.
Инсталирање Беансталк-а
Први корак који треба предузети је инсталирање beanstalkd.
sudo apt-get update
sudo apt-get install beanstalkd
Покрените услугу.
sudo systemctl start beanstalkd
Такође можете омогућити да се услуга покрене након иницијализације система.
sudo systemctl enable beanstalkd
Проверите статус услуге издавањем следеће команде.
sudo systemctl status beanstalkd
Подразумевано, beanstalkdслуша на порту 11300. Беансталк користи једноставан протокол заснован на тексту описан у свом гитхуб репозиторијуму . Можете тестирати његов протокол тако што ћете покренути telnet.
telnet localhost 11300
Напишите следеће и притисните ENTER.
list-tubes
Требало би да видите листу цеви доступних на серверу:
OK 14
---
- default
Да бисте затворили везу, једноставно откуцајте, quitа затим притисните ENTER.
Цеви у Беансталк-у представљају радне редове. Стабљика пасуља се састоји углавном од произвођача , потрошача , послова и цеви . Произвођачи стављају послове у цев да их конзумира (обради) било који број потрошача. Имајте на уму да су и произвођачи и потрошачи једноставно клијенти Беансталк сервера и потпуно су независни један од другог. У практичном смислу, ово значи да коришћењем Беансталк-а можете да креирате своје послове у својој ПХП апликацији и да их обрађујете у НодеЈС апликацији, на пример. Срећом, Ларавел апстрахује све ово и пружа нам врло једноставан АПИ за слање и руковање пословима, као што ћемо видети следеће.
Пример пројекта
Да бисмо направили наш пример пројекта, прво морамо да инсталирамо његове зависности. Инсталираћемо ПХП и Цомпосер.
sudo apt-get install php php-mbstring php-xml php-common php-zip composer
Сада креирајте пројекат заснован на Ларавел 5.5.
composer create-project --prefer-dist laravel/laravel vultr "5.5.*"
Затим cdу недавно креирану фасциклу. Од сада ћемо радити у овом директоријуму. Ова фасцикла се касније може референцирати као PROJECT_ROOT.
cd vultr/
Да бисмо користили Беансталк у Ларавел-у, потребно је да инсталирамо још једну зависност, ПХП Беансталк клијент.
composer require pda/pheanstalk ~3.0
Такође треба да направимо представништво посла. У Ларавел-у, ово је класа унутар app/Jobsфасцикле. Ларавел има команду на конзоли која нам помаже да креирамо класу Јоб. Хајде да направимо наш пример посла.
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']);
}
}
Метода ручке је оно што ће се ефикасно извршити када се посао потроши. Овде преузимамо податке из Вултр АПИ-ја, насумично бирамо ОС и уписујемо изабрани ОС у датотеку евиденције. Датотека евиденције се налази на storage/logs/laravel.log.
Већ смо инсталирали Беансталк и дефинисали посао који ће он извршити. Сада је време да се каже Ларавел-у да користи Беансталк као подразумевани радни ред. Копирајте подразумевану .envдатотеку коју сте добили од Ларавел инсталације.
cp .env.example .env
Сада отворите .envдатотеку и ажурирајте ред у којем је наведен драјвер реда.
QUEUE_DRIVER=beanstalkd
На крају, генеришите кључ апликације.
php artisan key:generate
Сада смо спремни да пошаљемо послове у радни ред Беансталк-а.
Распоређивање и вођење послова
Слање посла у Ларавел-у је прилично једноставно. Ажурирајте 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!
Отворите нову ССХ везу са својим сервером и унутар корена нашег пројекта извршите следеће.
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
Имајте на уму да ће права путања за постављање конфигурационе датотеке Супервизора зависити од вашег подешавања. Такође, не заборавите да замените [PROJECT_ROOT]пуном путањом до PROJECT_ROOTна вашем систему.
Овде конфигуришемо Супервизор да аутоматски почне да обрађује ред и, у случају да се скрипта поквари, да је поново покрене. Такође имајте на уму да не инстанцирамо једног радника, већ 8 процеса. Слободни сте да инстанцирате колико год процеса сматрате потребним у зависности од ваше апликације.
Да бисте дозволили Супервизору да управља нашим радником, натерајте га да поново прочита своју конфигурацију.
sudo supervisorctl reread
sudo supervisorctl update
Ако услуга Супервизор није покренута, многи морате да је покренете.
sudo systemctl start supervisord
Сада да видимо да ли се послови обрађују.
tail -f storage/logs/laravel.log
У веб прегледачу идите на http://[vultr-instance-ip]:8000. Видећете да се евиденције генеришу на вашој конзоли.
Закључак
Успешно смо конфигурисали Ларавел апликацију да користи Беансталк као радни ред. Такође, демонстрирали смо како се Супервизор користи за управљање радницима.