跳至主内容
版本:4.2

可配置的限制和超时

简介

本指南提供了 RabbitMQ 可配置限制和超时的概述。

本指南有意省略了一些高级限制以及无法通过 rabbitmq.conf、虚拟主机 元数据策略 或其他配置方式配置的限制,而是通过编程方式(例如,由 RabbitMQ 核心或插件)控制的限制。

注意

在本指南中,我们将可配置限制定义为通过 rabbitmq.conf、虚拟主机 元数据策略操作员策略 或任何其他方式配置的设置,这些设置控制着集群或特定节点上允许的连接、通道、队列、流或其他应用程序控制的资源的数量。

这些限制中的许多在专门的指南中有更详细的介绍。

为何使用可配置限制

现代消息和流式处理协议,例如 RabbitMQ 支持的协议,赋予应用程序开发人员定义其拓扑资源(如队列和流、交换器、绑定等)的自由。

其中一些资源可能会被应用程序无意中泄露。例如,应用程序可能会保持连接(或通道、会话)打开,不清理不再需要的队列或流,等等。

可配置限制是一种保护机制,允许集群操作员阻止此类应用程序消耗过多的资源,从而影响其他应用程序或集群的稳定性。

当 RabbitMQ 集群作为服务提供时,这种保护措施尤其重要。

可用限制

每个虚拟主机的限制

每个虚拟主机的限制,顾名思义,适用于特定的虚拟主机。

  • 虚拟主机中的并发客户端连接的最大数量。
  • 可以在虚拟主机中声明的队列和流的最大数量。

每个用户的限制

每个用户的限制适用于用户帐户(用户名)。

  • 以该用户身份进行身份验证的最大并发客户端连接数。
  • 用户所有连接上打开的最大并发通道数。

每个连接的限制

每个连接的限制适用于单个客户端连接。

rabbitmq.conf 设置类型描述默认值
channel_max整数客户端可以在单个连接上打开的最大 AMQP 0-9-1 通道数。防止应用程序泄露通道。通道号 0 保留用于内部使用。虽然默认值为 2047,但对于大多数用例,建议使用 16 到 128 之间的值。2047
session_max_per_connection整数每个连接的最大 AMQP 1.0 会话数。1
link_max_per_session整数每个会话的最大 AMQP 1.0 链接数。10
handshake_timeout整数(毫秒)AMQP 0-9-1 和 AMQP 1.0 握手完成允许的最大时间。10000(10 秒)
ssl_handshake_timeout整数(毫秒)TLS 握手完成允许的最大时间。5000(5 秒)
heartbeat整数(秒)服务器在连接协商期间建议的心跳超时值。60
frame_max整数(字节)AMQP 1.0、AMQP 0-9-1 和RabbitMQ 流协议的最大帧大小。不应更改;应依赖服务器和客户端库的默认值。131072(128 KiB)
initial_frame_max整数(字节)连接调整之前的最大帧大小。不应更改;应依赖服务器和客户端库的默认值。4096

RabbitMQ 支持的某些协议有其自身的特定限制。

MQTT

MQTT 连接有会话过期间隔限制。

rabbitmq.conf 设置类型描述默认值
mqtt.max_session_expiry_interval_seconds整数(秒)MQTT 客户端可以请求的最大会话过期间隔86400(1 天)

每个通道的限制

consumer_max_per_channel 控制可以在单个通道上注册的最大使用者数量。此设置可防止应用程序泄露使用者。

默认值为无限制。要设置限制,请在 rabbitmq.conf 中进行配置。

consumer_max_per_channel = 10

每个集群的限制

以下设置在 rabbitmq.conf 中定义,但实际上适用于整个集群,因为它们限制的实体会在所有节点之间复制。

rabbitmq.conf 设置类型描述默认值
vhost_max整数集群中可以创建的最大虚拟主机数量。无限制
cluster_exchange_limit整数集群中可以声明的最大交换器数量。无限制
cluster_queue_limit整数集群中可以声明的最大队列数量。无限制
警告

由于这些设置是集群范围的,但通过每个节点的 rabbitmq.conf 配置文件单独配置,因此它们必须在所有集群节点上设置为相同的值。

每个节点的限制

每个节点的限制适用于各个集群节点。它们会影响所有虚拟主机和用户。

由于这些限制的粒度粗糙,因此通常在 RabbitMQ 集群作为服务提供的环境中用作保护措施,而集群操作员对部署的应用程序做什么既不了解也不受控制。

另请参阅:打开文件句柄限制

rabbitmq.conf 设置类型描述默认值
consumer_timeout正整数(毫秒)定义 RabbitMQ 等待使用者进行投递确认的时间1800000(30 分钟)
connection_max整数节点将接受的最大并发客户端连接数。无限制
channel_max_per_node整数节点上所有连接的总最大通道数。无限制
ranch_connection_max整数节点将接受的最大并发 TCP 连接数;包括HTTP API 连接。无限制
max_message_size整数(字节)消息和流式客户端可以发布的は最大消息大小。大于此的消息将被拒绝。允许的最大值为 512 MiB。134217728(128 MiB)
management.http.max_body_size整数(字节)最大 HTTP API 请求正文大小。20971520(20 MiB)

每个队列的限制

可以通过策略为单个队列配置限制。

  • 队列长度限制:限制队列中就绪消息的最大数量或消息总字节数。达到限制时,消息将从队列头部被丢弃,或拒绝新的发布。
  • 消息 TTL:队列中的消息在指定时间段后过期。
  • 队列 TTL:队列在一段时间不活动后会自动删除。
  • 投递限制仲裁队列):在消息被丢弃或发送到死信队列之前,最大投递尝试次数。在 RabbitMQ 4.0+ 中默认为 20,在 3.x 中为无限制。通过 delivery-limit 策略键或队列参数配置。
  • 优先级级别优先级队列):x-max-priority 队列参数定义了最大优先级级别(1-255)。建议使用 1 到 5 之间的值以获得最佳性能。

每个流的限制

流具有保留设置,用于控制数据过期。

  • max-age:流中消息的最大年龄(例如,7 天为 7D)。
  • max-length-bytes:流的总最大字节大小。

达到保留限制时,最旧的段将被丢弃。这些可以通过策略或在流声明时作为可选的流参数进行配置。

请参阅流指南以了解更多信息。

© . This site is unofficial and not affiliated with VMware.