Как использовать RabbitMqBundle в Symfony4?

RabbitMQ - это популярное сообщение-ориентированное протокола передачи данных, который широко используется в различных приложениях для обмена сообщениями между разными компонентами системы. В Symfony4 существует специальный пакет, называемый RabbitMqBundle, который облегчает интеграцию с RabbitMQ в вашем приложении.

Чтобы начать использовать RabbitMqBundle в Symfony4, сначала вам необходимо установить пакет с помощью Composer, запустив следующую команду:

composer require enqueue/rabbitmq-bundle

После успешной установки пакета вам необходимо настроить соединение с RabbitMQ в файле config/packages/enqueue.yaml. Создайте этот файл, если его еще нет, и добавьте следующий код:

enqueue:
    transport:
        default: rabbitmq
        connections:
            rabbitmq:
                driver: rabbitmq
                dsn: "amqp://guest:guest@localhost:5672//"
                lazy: true
                options: {}

В этом примере мы указываем, что мы хотим использовать RabbitMQ в качестве нашего транспорта сообщений по умолчанию. Мы также указываем URL-адрес (DSN) для соединения с RabbitMQ. Вы можете изменить его в соответствии с вашей конфигурацией RabbitMQ.

После этого вам необходимо создать обработчик сообщений. Создайте новый класс, например, MyMessageHandler.php, и определите метод handle(), который будет обрабатывать входящие сообщения. Ниже приведен пример:

namespace AppMessageHandler;

use AppMessageMyMessage;

class MyMessageHandler
{
    public function handle(MyMessage $message)
    {
        // Обработка входящего сообщения
    }
}

Затем вам нужно зарегистрировать обработчик сообщений в вашем приложении. Вы можете сделать это в файле config/services.yaml, добавив следующий код:

services:
    AppMessageHandlerMyMessageHandler:
        tags:
            - { name: enqueue.consumption.handler, topic: my_topic }

В этом примере мы регистрируем MyMessageHandler как обработчик сообщений для темы my_topic.

Теперь вы можете использовать RabbitMqBundle в вашем коде Symfony4. Для отправки сообщений вы можете использовать следующий код:

use EnqueueRabbitMqRabbitMqDestination;
use EnqueueRabbitMqRabbitMqMessage;
use EnqueueRabbitMqSerializerJmsSerializer;

...

$producer = $container->get('enqueue.producer');
$message = new RabbitMqMessage('Hello, RabbitMQ!');
$destination = new RabbitMqDestination('my_topic');
$producer->send($destination, $message);

В этом примере мы используем сервисный контейнер Symfony ($container), чтобы получить экземпляр enqueue.producer, который является продюсером RabbitMQ. Затем мы создаем новое сообщение с текстом 'Hello, RabbitMQ!', и отправляем его в тему my_topic.

Все установки и настройки Раббита за вас делает RabbitMqBundle, вы можете сфокусироваться только на отправке и получении сообщений в ваших приложениях Symfony4 через RabbitMQ.