Привет! Меня зовут Павел и я Magento 2 бэкенд-разработчик. Когда-то давно, когда я только начинал знакомство с Magento 2 (для краткости буду называть ее M2), мне понадобилось автоматизировать обработку однотипных событий при разработке одного решения. Тогда я удивился, насколько мало информации на русском языке об интеграции очередей в M2. Время идет, а ситуация не меняется: информации об этом на просторах рунета все так же мало. Раскроем эту тему. Для начала кратко поговорим про очереди: что это такое и зачем они нужны, потом рассмотрим интеграцию M2 с популярным менеджером очередей Rabbit MQ (далее по тексту — RMQ), а также напишем простую реализацию работы с очередями в качестве примера. Погнали! Менеджеры очередей обеспечивают асинхронную процедуру обмена данными между элементами одной системы или разными системами. Для хранения сообщений используются очереди. Менеджер через обменник (exchange) принимает сообщение (некие данные) от издателя (publisher) и помещает в именованную очередь (queue), откуда их может запросить потребитель (consumer) и определенным образом обработать. Использование менеджеров очередей обладает рядом преимуществ, вот главные из них: Слабая связанность издателя и потребителя — данные подсистемы работают асинхронно, используя менеджер очередей в качестве посредника, что обеспечивает возможность независимой модификации систем при условии неизменности интерфейсов; Экономия и балансировка потребления ресурсов — использование очередей позволяет избежать дублирования сообщений, а также обеспечивает возможность управления потреблением вычислительных ресурсов, затрачиваемых на обработку сообщений; Гарантия сохранения данных — менеджер очередей обеспечивает сохранность данных в случае непредвиденного отказа издателя или потребителя; Асинхронная обработка данных позволяет публиковать и обрабатывать сообщения независимо, в разных потоках, системах и в разное время. Это далеко не полный список преимуществ, однако достаточный для понимания удобства использования очередей, а также случаев, когда такое использование уместно.   «Из коробки» М2 умеет интегрироваться с RMQ, чего достаточно для подавляющего большинства сценариев использования очередей. На хабре есть отличный сериал про RMQ от пользователя @artemmatveev, рекомендую ознакомиться для углубленного понимания того, как это работает (ну и, конечно же, официальную документацию никто не отменял). В рамках данной статьи нам будет достаточно базовых сведений.  Условимся, что RMQ у нас установлен, настроен и работает. Если нет, то нужно обратиться к первоисточнику, после чего вернуться к данной статье. Наиболее частый сценарий использования — RMQ установлен на том же сервере, что и M2. Но это не обязательно, поскольку RMQ является полностью независимым, и для подключения к нему нам нужно знать хост, порт и реквизиты доступа (об этом чуть ниже). Итак, RMQ работает, теперь нужно подружить M2 с ним. Для этого идем в <magento_root>/app/etc/env.php и добавляем такой раздел:  Выполняем bin/magento setup:upgrade для достижения эффекта. Если все компоненты работают корректно, то работа завершена: теперь M2 умеет общаться с RMQ. Процедуру настройки также можно выполнить сразу при установке M2. Для этого в команду bin/magento setup:install нужно добавить необходимые параметры, например: Настоятельно рекомендую установить плагин для RMQ, который называется Management, это позволит через браузер настраивать конфигурацию RMQ, просматривать очереди и делать много всего полезного (в том числе убедиться, что все работает как надо). Обожаю совмещать теорию с практикой, поэтому сейчас мы реализуем процесс с поддержкой очередей в М2. Создадим стандартный модуль М2. Условимся, что у нас уже есть реализация объекта (модель, ресурс-модель и т.д.), которую назовем по традиции WhiteRabbit. Теперь нам нужно объявить несколько сущностей, для этого создадим несколько xml файлов в папке etc нашего модуля.  communication.xml — задает общую конфигурацию для взаимодействия модуля с очередью сообщений. Создаем топик с именем white.rabbit и задаем интерфейс, реализация которого описывает объект, содержащийся в запросе.  Полное описание XML-схемы этого файла можно найти на странице документации.  queue_consumer.xml — описываем потребителя, назначаем ему очередь, которую он будет слушать, а также класс и метод, которые будут обрабатывать сообщения, полученные из очереди. Полное описание XML-схемы этого файла можно найти на странице документации.  queue_topology.xml — объявляем обменники, роутинг и очереди. Здесь мы создаем обменник с именем rshb.white.rabbit, а также привязываем к нему топик white.rabbit и очередь white_rabbit в качестве пункта назначения. Полное описание XML-схемы этого файла можно найти на странице документации.  queue_publisher.xml — объявляем издателя, привязываем его к топику и указываем обменник, который будет им использоваться. Полное описание XML-схемы этого файла можно найти на странице документации. Пришла очередь написать объявленные классы. Описываем потребителя: Класс издателя: На этом наша реализация готова. Попробуем что нибудь положить в очередь: Посмотрим на нашу очередь через плагин Management. Для этого зайдем на страницу http://<yourhost>:15672 и введем логин и пароль (по умолчанию - guest:guest) для авторизации. На вкладке Queues выбираем нашу очередь white_rabbit и видим в ней объект, который мы положили туда на прошлом шаге: На данном этапе потребитель должен получить сообщение из очереди и каким-то образом его обработать (метод processMessage в классе потребителя). По умолчанию cron-задача запускает потребителя 1 раз в секунду (потребителю можно задать произвольный период опроса очереди путем указания атрибута sleep элемента consumer в файле queue_consumer.xml). На этом наша демонстрационная реализация очередей в M2 закончена. Интеграция в RMQ и M2 легко настраивается, но, вместе с тем, обладает отличной гибкостью и позволяет использовать все штатные возможности RMQ, причем как с размещением RMQ на том же сервере, так и на отдельном. Использование RMQ в связке с M2 заметно повышает и так незаурядные способности M2  к расширению. На этом все. Пишите код с удовольствием и используйте правильные решения. До встречи! Magento 2 Developer