跳到主要内容
版本: 4.1

连接阻塞通知

概述

有时,当客户端的连接由于 Broker 资源不足(内存或磁盘)而被阻止时,客户端希望收到通知。

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

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

有关此的更多详细信息,请参阅capabilities 部分。我们支持的客户端默认指示此功能,并提供了一种注册 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;
© . All rights reserved.