跳至主要内容
版本:4.0

连接阻塞通知

概述

有时客户端希望在由于代理资源(内存或磁盘)不足而导致其连接被阻塞时收到通知。

我们引入了一个 AMQP 0-9-1 协议扩展,其中代理在连接被阻塞时向客户端发送 connection.blocked 方法,并在连接解除阻塞时发送 connection.unblocked 方法。

要接收这些通知,客户端必须在其 client-properties 中提供一个 capabilities 表,其中包含一个键 connection.blocked 和一个布尔值 true

有关此内容的更多详细信息,请参阅功能部分。我们支持的客户端默认情况下指示此功能,并提供一种注册 connection.blockedconnection.unblocked 方法处理程序的方法。

何时发送通知

RabbitMQ 第一次资源不足时,会向发布连接发送 connection.blocked 通知。例如,当 RabbitMQ 节点检测到其 RAM 不足时,它会向所有支持此功能的已连接发布客户端发送 connection.blocked。如果在连接解除阻塞之前,节点也开始磁盘空间不足,则不会发送另一个 connection.blocked

所有资源警报都已清除并且连接已完全解除阻塞时,将发送 connection.unblocked

使用 Java 客户端的连接阻塞通知

使用官方 Java 客户端,连接阻塞通知由 BlockedListener 接口实现处理。可以使用 Connection.addBlockedListener 方法在 Connection 上注册它们。

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
}
});

使用 .NET 客户端的连接阻塞通知

使用官方 .NET 客户端,可以通过在 IConnection 中注册 ConnectionBlockedConnectionUnblocked 事件来接收连接阻塞通知。

  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;
© 2024 RabbitMQ. All rights reserved.