There are plenty of variables that determine how well your RabbitMQ performs. There are a few best practices to optimize its performance. In this AppOptics APM blog you can find a guide on handling slow response time, and in this article, we'll look at the changes, settings, and other aspects that allow a high level of performance.
Queue Best Practices
It is a good idea to set a maximum length of the queue, especially if spikes of messages often hit the application. That allows you to keep the queue shorter since messages are discarded from the head. That way, it does not get any bigger than the maximum length. Keeping it short as much as you can is best for maximum performance. You should keep them around zero if you can. Some applications might enable lazy queues as a default setting. That means that the messages get stored on the disk automatically. While that reduces your RAM usage, it also increases the throughput time. The message gets loaded to the memory when it is needed.
Using More Than One Queue
It is best to split the queue over different cores since its performance is limited to just one core. That gives you better performance, and you can split them into different nodes as well for clusters. Each one is bound to the node you declared them in. Even if there is a cluster, each message sent to a certain queue goes to the corresponding node. You can split them manually among the nodes as long as you remember where you put each one.
In RabbitMQ, queues are single-threaded. Each one can handle around 50,000 messages. If you have more than one, you can get better throughput, especially for multi-core systems. You should have the same number of them as you do cores on the node. With the management interface, it is easy to monitor RabbitMQ performance since there are metrics on each queue in your cluster. But if there are thousands of active ones, the server may slow down. Plus, it can cause the RAM and CPU usage to increase too much.
Using Plugins
Plugins can be helpful to an extent as long as you do not overuse them. For example, the consistent hash plugin lets you load balance messages using an exchange. The messages are distributed evenly based on their routing key. This plugin makes a hash with the routing key. The job might be hard to do manually, and the plugin makes it easier. It is also useful if you want to use the cores in the cluster. Remember, it is essential to consume from all of the queues.
While plugins can be helpful and help you be more efficient, it is also a good idea to disable plugins if you aren't using them. Each one uses more RAM or CPU. It is best to avoid using too many plugins on production servers. If you are using an unnecessary plugin, it is time to disable it. The control panel can be used for turning plugins on or off to speed up the process.