a-mazalov/kali-message-broker

Messaging between microservices

v3.0.1 2024-04-24 12:07 UTC

README

Latest Stable Version

Messages between services using the rabbitmq broker

Запуск в dev container VScode

  1. Open project
  2. F1 -> Dev Containers: Rebuild and Reopen in Container

Запуск тестов

composer test

Публикация сообщений в RabbitMQ

  1. Необходимо указать подключение к 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
  1. Отправка через 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

Для получения сообщений из Rabbitmq необходимо подключение и обработчик очереди php artisan rabbitmq:consume

  1. Требуется дополнительная установка пакета laravel-queue-rabbitmq

  2. Необходимо указать подключение к rabbitmq и прослушиваемую очередь RABBITMQ_QUEUE

RABBITMQ_HOST=rabbitmq
RABBITMQ_PORT=5672
RABBITMQ_USER=root
RABBITMQ_PASSWORD=root
RABBITMQ_VHOST=/
RABBITMQ_QUEUE=access_queue
  1. Добавить конфигурацию в 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'),
        ],
  1. Реализовать класс обработчика сообщений и указать его в конфигурации
    'queue' => [
        'job' => \Kali\MessageBroker\Worker\ConsumeRabbitMQ::class,
    ],
  1. Выполнить php artisan vendor:publish и выбрать Kali\MessageBroker\Providers\MsgServiceProvider

  2. Заполнить config/message.php для соотвествия имени входящего сообщения и выполнения требуемой задачи

  3. Запустить обработчки php artisan rabbitmq:consume rabbitmq_consumer

rabbitmq_consumer - имя подключение в config/queue.php