This module demonstrates how to handle asynchronous events in Magento 2 using RabbitMQ.
- Producer: Sends messages to the RabbitMQ queue.
- Queue: Holds messages until they're processed.
- Topic: Groups related messages together based on a theme or subject.
- Consumer: Listens to the queue, grabs messages, and processes them. (This example includes two consumers.)
- A working Magento 2 store.
- RabbitMQ server installed and configured (check official documentation for details).
-
Enable the module:
bin/magento module:enable Rick_RabbitMQExample
-
Upgrade Magento:
bin/magento setup:upgrade
Update the queue
section with your RabbitMQ details (avoid defaults for real stores).
'queue' => [
'consumers_wait_for_messages' => 0, // Processes messages immediately, minimizing latency.
'only_spawn_when_message_available' => 1, // Spawns consumer processes only when messages are available, optimizing resource utilization.
'amqp' => [
'host' => 'rabbitmq', // Assumes RabbitMQ server runs in a "rabbitmq" Docker container.
'port' => 5672,
'user' => 'guest',
'password' => 'guest',
'virtualhost' => '/',
'ssl' => false // Change to `true` for secure connections (recommended for production)
]
],
bin/magento queue:consumers:list
Run these commands to start listening for messages:
bin/magento queue:consumers:start test_consumer_one
bin/magento queue:consumers:start test_consumer_two
In production, use cron to automatically start queue listeners every minute (* * * * *).
Add consumers to cron_consumers_runner
in app/etc/env.php
:
'cron_consumers_runner' => [
'cron_run' => true,
'max_messages' => 20000,
'consumers' => [
'test_consumer_one',
'test_consumer_two',
],
],
- Create Message Producer: Use
Magento\Framework\MessageQueue\PublisherInterface
to publish messages to the RabbitMQ queue. - Implement Message Consumer: Create a queue consumer class that extends
Vendor\Module\Api\ConsumerInterface
and processes messages received from the queue. - Configure Queue and Consumer: Register your queue and consumer in
communication.xml
,queue_topology.xml
,queue_consumer.xml
, andqueue_publisher.xml
.
See the Magento documentation: