Messages between services using the rabbitmq broker
- Open project
- F1 -> Dev Containers: Rebuild and Reopen in Container
composer test
- Необходимо указать подключение к RabbitMQ AMQP
Где AMQP_EXCHANGE_NAME
имя общего обменника
AMQP_HOST=rabbitmq
AMQP_PORT=5672
AMQP_USER=root
AMQP_PASSWORD=root
AMQP_VHOST=/
AMQP_QUEUE_NAME=
AMQP_EXCHANGE_NAME=incoming_web
- Отправка через Notification
Реализовать класс уведомления с каналом RabbitmqChannel
или воспользоваться существующим классом RabbitmqMessageNotification
use Kali\MessageBroker\Messages\Data\Test;
use Kali\MessageBroker\Notifications\RabbitmqMessageNotification;
$testData = new Test(email: "djoni@google.com", message: "Hello World!");
$routing_key = "access" // очередь сервиса в который необходимо отправить сообщение. Роутинг настраивается через Exchange в админке RabbitMQ
Notification::route("rabbitmq", $routing_key)->notify(
new RabbitmqMessageNotification("TestJob", $testData->toResource())
);
Для получения сообщений из Rabbitmq необходимо подключение и обработчик очереди php artisan rabbitmq:consume
-
Требуется дополнительная установка пакета laravel-queue-rabbitmq
-
Необходимо указать подключение к rabbitmq и прослушиваемую очередь
RABBITMQ_QUEUE
RABBITMQ_HOST=rabbitmq
RABBITMQ_PORT=5672
RABBITMQ_USER=root
RABBITMQ_PASSWORD=root
RABBITMQ_VHOST=/
RABBITMQ_QUEUE=access_queue
- Добавить конфигурацию в
config/queue.php
(актуальная конфигурация в документации пакета)
'rabbitmq_consumer' => [
'driver' => 'rabbitmq',
'queue' => env('RABBITMQ_QUEUE', 'default'),
'connection' => PhpAmqpLib\Connection\AMQPLazyConnection::class,
'hosts' => [
[
'host' => env('RABBITMQ_HOST', '127.0.0.1'),
'port' => env('RABBITMQ_PORT', 5672),
'user' => env('RABBITMQ_USER', 'guest'),
'password' => env('RABBITMQ_PASSWORD', 'guest'),
'vhost' => env('RABBITMQ_VHOST', '/'),
],
],
'options' => [
'ssl_options' => [
'cafile' => env('RABBITMQ_SSL_CAFILE', null),
'local_cert' => env('RABBITMQ_SSL_LOCALCERT', null),
'local_key' => env('RABBITMQ_SSL_LOCALKEY', null),
'verify_peer' => env('RABBITMQ_SSL_VERIFY_PEER', true),
'passphrase' => env('RABBITMQ_SSL_PASSPHRASE', null),
],
'queue' => [
'job' => \Kali\MessageBroker\Worker\ConsumeRabbitMQ::class,
],
],
/*
* Set to "horizon" if you wish to use Laravel Horizon.
*/
'worker' => env('RABBITMQ_WORKER', 'default'),
],
- Реализовать класс обработчика сообщений и указать его в конфигурации
'queue' => [
'job' => \Kali\MessageBroker\Worker\ConsumeRabbitMQ::class,
],
-
Выполнить
php artisan vendor:publish
и выбратьKali\MessageBroker\Providers\MsgServiceProvider
-
Заполнить
config/message.php
для соотвествия имени входящего сообщения и выполнения требуемой задачи -
Запустить обработчки
php artisan rabbitmq:consume rabbitmq_consumer
rabbitmq_consumer - имя подключение в
config/queue.php