Nexcess: Configure the RabbitMQ/Magento 2 container option to reduce load/delivery times for the data exchange between processes, applications, and servers.
Before explaining the process of enabling and configuring RabbitMQ/Magento 2, let us understand what containers and RabbitMQ are in term of cloud technology.
Containers are units of software that can be added to your cloud solution to expand performance, functionality, and management. Containers are lightweight, secure, and external instances that will not take resources from your main cloud solution.
RabbitMQ is an open source message broker that helps websites to exchange data between processes, applications, and servers. This cloud technology item can help reduce load and delivery times by delegating tasks to a third party.
Nexcess provides the RabbitMQ cloud container service option for our Managed Applications (MA) Magento Plans. This article will cover how to optimally configure RabbitMQ for Magento 2 after enabling the corresponding option via the Nexcess Client Portal.
Click on View Password option to find its related password. You will need that password information in the next step of configuring the service.
You have to edit the code as follows:
Make sure you have entered the correct values in the host, port, user, and password areas. Then save that file and run the below command to apply the changes:
That's it! You have successfully enabled and configured RabbitMQ Magento 2 on Nexcess!
You can manage message queues from the command line using cron jobs to ensure that consumers retrieve messages.
Cron jobs are the default mechanism to restart consumers. Processes started by cron consume the specified number of messages and then terminate. Rerunning cron restarts the consumer.
The following example shows the Magento crontab configuration for running consumers.
Path of cron job related to Message Queue:
How often you check message queues depends on your business logic and available system resources. In general, you’ll probably want to check for newly created customers and send welcome emails more frequently than a more resource-intensive process (for example, updating your catalog). It would be best if you defined cron schedules according to your business needs.
The configuration behaviors by default are:
- The cron job consumers_runner is enabled.
- The cron job consumers_runner runs all defined consumers.
- Each consumer processes 10000 messages and then terminates.
Edit the /app/etc/env.php file to configure the cron job consumers_runner:
- cron_run - A boolean value that enables or disables the consumers_runner cron job (default = true).
- max_messages - The maximum number of messages each consumer must process before terminating (default = 10000). Although we do not recommend it, you can use 0 to prevent the consumer from terminating. See consumers_wait_for_messages to configure how consumers process messages from the message queue.
- consumers - An array of strings specifying which consumer(s) to run. An empty array runs all consumers.
To view a list of all consumers, run the following command:
To start message queue consumers, run the following command:
After consuming all available messages, the command terminates. You can run the command again manually or with a cron job. You can also run multiple instances of the magento queue:consumers:start command to process large message queues. For example, you can append & to the command to run it in the background, return to a prompt, and continue running commands:
Common Mistake #1: Don't use too many connections or channels
Try to keep the connection/channel count low. For example, use separate connections to publish and consume. Ideally, you should have one connection per process; and use one channel per thread in your application.
How best to reuse connections:
- One connection for publishing
- One connection for consuming
Short queues are fastest; when a queue is empty, and it has consumers ready to receive messages, as soon as a message is received, it goes straight out to the consumer.
A typical mistake is to have an unlimited prefetch value, where one client receives all messages. This configuration can lead to the client running out of memory and crashing, and then all messages are redelivered.
Use lazy queues to achieve predictable performance or when you have large queues. Lazy queues create a more stable cluster with more predictable performance. Your messages will not, without warning, get flushed to disk.
Achieve better throughput on a multi-core system with multiple queues and consumers. You will achieve optimal throughput if you have as many queues as cores on the underlying node(s).
Read more about the Fully Managed Magento Hosting and the benefits for your business.
Fully Managed Magento HostingOptimized Ecommerce Hosting for Speed, Security and ScalePWA Ready, server clusters, instant auto scaling, PCI compliance + premium security. Extended security for M1.
We also have a variety of Nexcess support articles about Magento 2, including how to get your site going with a number of different configuration options. These resources include a great article with answers to common question, Magento 2 Help: Frequently Asked Questions (FAQ).
If you need any assistance with the above-mentioned, don't hesitate to reach out. For 24-hour assistance any day of the year, Nexcess customers can contact our support team by email or through your Client Portal.
Why Choose Nexcess?
Because we're different! Chris Lema captures "the why" in his passionate and stirring recount of a Nexcess support-related story.
Resources for More Information
Need more help? With regards to security topics, The Applications section also contains valuable insights for those seeking additional knowledge about our other various hosted applications and platforms. Check out our related video playlists and articles below: