Пример использования Yandex Message Queue на Laravel
Для работы с очередями PHP-фреймворк Laravel
Установка
Установите Laravel по инструкции
Подготовка к работе
- Создайте сервисный аккаунт.
- Назначьте роль editor сервисному аккаунту.
- Создайте статический ключ доступа.
Задайте переменные окружения:
export AWS_ACCESS_KEY_ID="<идентификатор_ключа_доступа>"
export AWS_SECRET_ACCESS_KEY="<секретный_ключ>"
Создайте очередь в сервисе Message Queue и скопируйте ее URL.
Инструкции
В этом примере создается демонстрационная задача (Job), которая суммирует два числа, и команда (Command), которая ставит задачу в очередь Message Queue.
Чтобы использовать Message Queue с Laravel, выполните следующие инструкции.
-
Создайте тестовый проект
mq_example:composer create-project --prefer-dist laravel/laravel mq_example -
Создайте задачу
Add:php artisan make:job Add -
Откройте файл
/app/Jobs/Add.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; class Add implements ShouldQueue { use Dispatchable, InteractsWithQueue, Queueable, SerializesModels; private $addend1 = null; private $addend2 = null; /** * Create a new job instance. * * @return void */ public function __construct($addend1, $addend2) { $this->addend1 = $addend1; $this->addend2 = $addend2; } /** * Execute the job. */ public function handle() { $result = $this->addend1 + $this->addend2; print("{$this->addend1} + {$this->addend2} = $result\n"); } } -
Создайте новую команду
ScheduleAdd:php artisan make:command ScheduleAdd -
Откройте файл
app/Console/Commands/ScheduleAdd.phpи приведите его к следующему виду:<?php namespace App\Console\Commands; use App\Jobs\Add; use Illuminate\Console\Command; class ScheduleAdd extends Command { /** * The name and signature of the console command. * * @var string */ protected $signature = 'sample:schedule-add'; /** * The console command description. * * @var string */ protected $description = 'Command description'; /** * Create a new command instance. * * @return void */ public function __construct() { parent::__construct(); } /** * Execute the console command. * * @return mixed */ public function handle() { Add::dispatch(2, 3); } } -
Откройте файл
config/queue.phpи приведите строку'default' => env('QUEUE_CONNECTION', 'sync'),к виду'default' => 'sqs',. -
Заполните параметры в блоке
sqs.Чтобы получить значения для параметров
prefixиqueue, разделите URL вашей очереди на две части: префиксом будет служитьhttps://message-queue.api.cloud.yandex.net/, а параметром очередиb1g8ad42m6he********/dj6000000000********без/в начале.'sqs' => [ 'driver' => 'sqs', 'key' => env('AWS_ACCESS_KEY_ID'), 'secret' => env('AWS_SECRET_ACCESS_KEY'), 'prefix' => env('SQS_PREFIX', 'https://message-queue.api.cloud.yandex.net/'), 'queue' => env('SQS_QUEUE', 'b1g8ad42m6he********/dj6000000000********/laravel-test'), 'region' => env('AWS_DEFAULT_REGION', 'ru-central1'), ], -
Добавьте в зависимости проекта пакет
aws/aws-sdk-php:composer require aws/aws-sdk-php -
Обновите конфигурацию Composer:
composer update -
Выполните команду:
php artisan sample:schedule-add -
Выполните команду:
php artisan queue:work