В предыдущем сообщении в блоге рассказывалось, как начать работу с RabbitMQ на PHP. Этот пост охватывает ту же тему обработки изображений и посвящен разработчикам Symfony.

В этом блоге я собираюсь показать, как использовать RabbitMQ для планирования некоторых фоновых задач в приложении полного стека Symfony. Эта статья будет больше об очередях сообщений, чем изображениях. В будущем посте в блоге будет больше практических вещей. Он расскажет нам о LiipImagineBundle и о том, как подготовить отфильтрованные изображения в фоновом режиме.

Все примеры основаны на библиотеке Enqueue PHP Messaging.

Я полагаю, вы уже установили брокер RabbitMQ и приложение Symfony.

Процесс установки состоит из трех шагов.

  • Шаг 1. Установите пакет Enqueue и расширение AMQP.
  • Шаг 2: Зарегистрируйте пакет в AppKernel.
  • Шаг 3: Настройте пакет.

Вот эти три шага:

Теперь предположим, что вы уже сохранили загруженное изображение. Мы должны отправить путь загруженного изображения в качестве сообщения фоновой задаче. Задача может читать изображение и выполнять с ним действия (создавать миниатюры, применять фильтры, оптимизировать размер и т. Д.).

Чтобы отправить такое сообщение, мы получили контекстную службу из контейнера. Мы используем контекст для создания очереди, сообщения и объектов-производителей. Имея эти объекты на месте, мы, наконец, можем отправить сообщение:

Приведенный выше код может быть помещен в конец действия контроллера.

Сообщение отправлено, и мы можем перейти к части потребления. Прежде всего, мы должны создать класс процессора, реализующий интерфейс PsrProcessor. Метод процесса должен содержать нашу логику обработки изображений и должен возвращать self::ACK, как только это будет выполнено. Процессор должен быть зарегистрирован как сервис в контейнере Symfony.

Вот примеры того, как это можно сделать:

Наконец, мы готовы приступить к работе с сообщениями. В комплекте идет некоторая удобная команда использования, которую мы собираемся использовать сейчас:

$ ./bin/console enqueue:transport:consume process_image acme.process_image_processor -vvv

Команда принимает два аргумента: очередь для использования и идентификатор службы процессора для передачи сообщений. Выполните столько экземпляров этих команд, сколько хотите, чтобы повысить производительность.

Заключение

В этом посте мы рассмотрели публикацию и использование сообщений в Symfony. В качестве брокера мы использовали RabbitMQ. Мы использовали транспортный уровень, который представляет собой подробную абстракцию. Существует абстракция высокого уровня, называемая клиентом. Он значительно упрощает работу и поддерживает дополнительные функции: задержку сообщений, шину сообщений, подписку на публикацию, настройку брокера и так далее. Мы расскажем об этом в специальном сообщении в блоге.

Вы также можете посетить наш корпоративный блог, чтобы узнать больше о последних тенденциях в области ИТ и загрузить некоторые полезные аналитические данные.