Flow Control

Overview

This guide covers a back pressure mechanism applied by RabbitMQ nodes to publishing connections in order to avoid runaway memory usage growth. It is necessary because some components in a node can fall behind particularly fast publishers as they have to do significantly more work than publishing clients (e.g. replicate data to N peer nodes or store it on disk).

How Does Flow Control Work

RabbitMQ will reduce the speed of connections which are publishing too quickly for queues to keep up. No configuration is required.

A flow-controlled connection will show a state of flow in rabbitmqctl, management UI and HTTP API responses. This means the connection is experiencing blocking and unblocking several times a second, in order to keep the rate of message ingress at one that the rest of the server (e.g. queues those messages are route to) can handle.

In general, a connection which is in flow control should not see any difference from normal running; the flow state is there to inform the sysadmin that the publishing rate is restricted, but from the client’s perspective it should just look like the network bandwidth to the server is lower than it actually is.

Other components than connections can be in the flow state. Channels, queues and other parts of the system can apply flow control that eventually propagates back to publishing connections.

To find out if consumers and prefetch settings can be key limiting factors, take a look at relevant metrics. See Monitoring and Health Checks guide to learn more.