Пример использования 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