It is sometimes desirable for clients to receive a notification when their connection gets blocked due to the broker running low on resources (memory or disk).
We have introduced an AMQP 0-9-1 protocol extension in which the broker sends to the client a connection.blocked method when the connection gets blocked, and connection.unblocked when it is unblocked.
To receive these notifications, the client must present a capabilities table in its client-properties in which there is a key connection.blocked and a boolean value true.
See the capabilities section for further details on this. Our supported clients indicate this capability by default and provide a way to register handlers for the connection.blocked and connection.unblocked methods.
A connection.blocked notification is sent to publishing connections the first time RabbitMQ is low on a resource. For example, when a RabbitMQ node detects that it is low on RAM, it sends connection.blocked to all connected publishing clients supporting this feature. If before the connections are unblocked the node also starts running low on disk space, another connection.blocked will not be sent.
A connection.unblocked is sent when all resource alarms have cleared and the connection is fully unblocked.
With the official Java client, blocked connection notifications are handled by BlockedListener interface implementations. They can be registered on a Connection using the Connection.addBlockedListener method:
ConnectionFactory factory = new ConnectionFactory(); Connection connection = factory.newConnection(); connection.addBlockedListener(new BlockedListener() { public void handleBlocked(String reason) throws IOException { // Connection is now blocked } public void handleUnblocked() throws IOException { // Connection is now unblocked } });
With the official .NET client, blocked connection notifications can be received by registering for the ConnectionBlocked and ConnectionUnblocked events in IConnection:
public void HandleBlocked(object sender, ConnectionBlockedEventArgs args) { // Connection is now blocked } public void HandleUnblocked(object sender, EventArgs args) { // Connection is now unblocked } Conn.ConnectionBlocked += HandleBlocked; Conn.ConnectionUnblocked += HandleUnblocked;
If you have questions about the contents of this guide or any other topic related to RabbitMQ, don't hesitate to ask them on the RabbitMQ mailing list.
If you'd like to contribute an improvement to the site, its source is available on GitHub. Simply fork the repository and submit a pull request. Thank you!