Соединение RabbitMQ с Symfony: методы и примеры кода

“Symfony Connect RabbitMQ” относится к интеграции системы обмена сообщениями RabbitMQ с Symfony, инфраструктурой PHP. Вот несколько методов с примерами кода для подключения Symfony к RabbitMQ:

  1. Использование пакета «old_sound_rabbit_mq»:

    • Установить пакет с помощью Composer:

      composer require oldsound/rabbitmq-bundle
    • Настройте соединение RabbitMQ в файле config/packages/old_sound_rabbit_mq.yaml:

      old_sound_rabbit_mq:
       connections:
           default:
               host: '%env(RABBITMQ_HOST)%'
               port: '%env(RABBITMQ_PORT)%'
               user: '%env(RABBITMQ_USER)%'
               password: '%env(RABBITMQ_PASSWORD)%'
               vhost: '%env(RABBITMQ_VHOST)%'
    • Определите потребительский класс, расширяющий OldSound\RabbitMqBundle\RabbitMq\ConsumerInterface:

      <?php
      namespace App\Consumer;
      use OldSound\RabbitMqBundle\RabbitMq\ConsumerInterface;
      use PhpAmqpLib\Message\AMQPMessage;
      class MyConsumer implements ConsumerInterface
      {
       public function execute(AMQPMessage $message)
       {
           // Process the message
           $body = $message->getBody();
           // ...
       }
      }
    • Настройте потребителя в файле config/packages/old_sound_rabbit_mq.yaml:

      old_sound_rabbit_mq:
       consumers:
           my_consumer:
               connection: default
               exchange_options: {name: 'my_exchange', type: direct}
               queue_options: {name: 'my_queue'}
               callback: 'App\Consumer\MyConsumer'
  2. Использование пакета «php-amqplib/rabbitmq-bundle»:

    • Установите пакет с помощью Composer:

      composer require php-amqplib/rabbitmq-bundle
    • Настройте соединение RabbitMQ в файле config/packages/rabbitmq.yaml:

      rabbitmq:
       connections:
           default:
               host: '%env(RABBITMQ_HOST)%'
               port: '%env(RABBITMQ_PORT)%'
               user: '%env(RABBITMQ_USER)%'
               password: '%env(RABBITMQ_PASSWORD)%'
               vhost: '%env(RABBITMQ_VHOST)%'
    • Определите потребительский класс, реализующий OldSound\RabbitMqBundle\RabbitMq\ConsumerInterface:

      <?php
      namespace App\Consumer;
      use OldSound\RabbitMqBundle\RabbitMq\ConsumerInterface;
      use PhpAmqpLib\Message\AMQPMessage;
      class MyConsumer implements ConsumerInterface
      {
       public function execute(AMQPMessage $message)
       {
           // Process the message
           $body = $message->getBody();
           // ...
       }
      }
    • Настройте потребителя в файле config/packages/rabbitmq.yaml:

      rabbitmq:
       consumers:
           my_consumer:
               connection: default
               exchange_options: {name: 'my_exchange', type: direct}
               queue_options: {name: 'my_queue'}
               callback: 'App\Consumer\MyConsumer'