The Message Queue Framework (MQF) is a system within Adobe Commerce that allows a module to publish messages to queues. It also defines the consumers that receive the messages asynchronously.
The MQF uses RabbitMQ as the messaging broker, which provides a scalable platform for sending and receiving messages. It also includes a mechanism for storing undelivered messages. RabbitMQ is based on the Advanced Message Queuing Protocol (AMQP) 0.9.1 specification.
If you prefer using an existing AMQP-based service, like RabbitMQ, instead of relying on Adobe Commerce on cloud infrastructure to create it for you, use the QUEUE_CONFIGURATION
environment variable to connect it to your site.
Use the following instructions for service setup on Pro Integration environments and Starter environments, including the master
branch.
Submit an Adobe Commerce Support ticket to change the service configuration on Pro Production and Staging environments.
To enable RabbitMQ:
Add the required name, type, and disk value (in MB) to the .magento/services.yaml
file along with the installed RabbitMQ version.
rabbitmq:
type: rabbitmq:<version>
disk: 1024
Configure the relationships in the .magento.app.yaml
file.
relationships:
rabbitmq: "rabbitmq:rabbitmq"
Add, commit, and push your code changes.
git add .magento/services.yaml .magento.app.yaml
git commit -m "Enable RabbitMQ service"
git push origin <branch-name>
After initial service setup, you can change the software version for an installed service by updating the services.yaml
and .magento.app.yaml
configuration files. See Change service version.
For debugging purposes, it is useful to directly connect to a service instance in one of the following ways:
Log in to the magento-cloud
CLI and project:
magento-cloud login
Check out the environment with RabbitMQ installed and configured.
magento-cloud environment:checkout <environment-id>
Use SSH to connect to the Cloud environment:
magento-cloud ssh
Retrieve the RabbitMQ connection details and login credentials from the $MAGENTO_CLOUD_RELATIONSHIPS variable:
echo $MAGENTO_CLOUD_RELATIONSHIPS | base64 -d | json_pp
or
php -r 'print_r(json_decode(base64_decode($_ENV["MAGENTO_CLOUD_RELATIONSHIPS"])));'
In the response, find the RabbitMQ information, for example:
{
"rabbitmq" : [
{
"password" : "guest",
"ip" : "246.0.129.2",
"scheme" : "amqp",
"port" : 5672,
"host" : "rabbitmq.internal",
"username" : "guest"
}
]
}
Enable local port forwarding to RabbitMQ.
ssh -L <port-number>:rabbitmq.internal:<port-number> <project-ID>-<branch-ID>@ssh.us.magentosite.cloud
An example for accessing the RabbitMQ management web interface at http://localhost:15672
is:
ssh -L 15672:rabbitmq.internal:15672 <project-ID>-<branch-ID>@ssh.us.magentosite.cloud
While the session is open, you can start a RabbitMQ client of your choice from your local workstation, configured to connect to the localhost:<portnumber>
using the port number, username, and password information from the MAGENTO_CLOUD_RELATIONSHIPS variable.
To connect to RabbitMQ running in an application, install a client, such as amqp-utils, as a project dependency in your .magento.app.yaml
file.
For example,
dependencies:
ruby:
amqp-utils: "0.5.1"
When you log in to your PHP container, you enter any amqp-
command available to manage your queues.
To connect to RabbitMQ using your PHP application, add a PHP library to your source tree.