

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# Amazon MQ for RabbitMQ 大小调整指南
大小调整指南

 您可以选择最能支持您的应用程序的代理实例类型。选择实例类型时，请考虑会影响代理性能的因素：
+ 客户端和队列的数量
+ 发送的消息量
+ 保存在内存中的消息
+ 冗余消息

 建议仅`m7g.medium`在测试应用程序性能时使用较小的代理实例类型。我们建议使用更大的代理实例类型`m7g.large`以及高于或生产级别的客户端和队列、高吞吐量、内存中的消息和冗余消息。

**重要**  
您不能将代理从`mq.m5`或`mq.m7g`实例类型降级为`mq.t3.micro`实例类型。

 请务必测试您的代理，以确定适合您的工作负载消息传递要求的实例类型和大小。

 请务必使用 RabbitMQ 4 代理上的默认资源限制，根据 Amazon MQ 最佳实践为您的应用程序确定合适的实例大小。这些默认资源限制基于类型、`m7g`实例类型和法定队列。
+ [m7g 单实例部署的默认资源限制](rabbitmq-resource-limits-configuration.md#default-values-single-instance)
+ [m7g 集群部署的默认资源限制](rabbitmq-resource-limits-configuration.md#default-values-cluster-brokers)

 您可以将任何限制的值增加到实例类型和部署模式所定义的最大值。但是，我们强烈建议您在生产中使用之前使用增加的值来测试代理性能。
+ [m7g 单实例部署的最大资源限制](rabbitmq-resource-hard-limit.md#sizing-guidelines-m7g-single-instance)
+ [m7g 集群部署的最大资源限制](rabbitmq-resource-hard-limit.md#sizing-guidelines-m7g-cluster)
+ [m5 单实例部署的最大资源限制](rabbitmq-resource-hard-limit.md#sizing-guidelines-single-instance)
+ [m5 集群部署的最大资源限制](sizing-guidelines-cluster.md)
+ [错误消息](rabbitmq-resource-hard-limit.md#sizing-guidelines-limits-error-messages)

**注意**  
 RabbitMQ 3.13 代理没有默认资源限制，但我们建议您使用建议的默认值。

# 默认资源限制


适用于 RabbitMQ 的 Amazon MQ 支持从 RabbitMQ 4 开始配置代理资源限制。当您创建代理时，Amazon MQ 会自动将默认值应用于这些资源限制。这些默认值充当保护您的经纪商可用性的护栏，同时适应常见的客户使用模式。您可以通过更改限制配置值来自定义代理行为，以更好地满足您的特定工作负载要求。

在进行更改之前，请注意：

**重要**  
配置更改可能会影响代理的性能和可用性
在更改任何默认配置选项之前，请先了解其影响
首先在非生产环境中测试配置更改
应用更改后监控代理运行状况

**重要**  
这些配置的默认值和支持的范围因 RabbitMQ 版本、实例类型和代理部署模式而异。

**重要**  
 *注意：将配置值超出支持范围的代理关联或创建代理将导致错误响应。*

要了解如何为您的经纪商自定义这些默认资源限制，请参阅[资源限制配置](configure-resource-limits.md)。

适用于 RabbitMQ 4.2 代理的默认资源限制为
+ [m7g 单实例部署的默认资源限制](#default-values-single-instance)
+ [m7g 集群部署的默认资源限制](#default-values-cluster-brokers)

## 默认资源限制


**重要**  
适用于 RabbitMQ 3 代理的 Amazon MQ，默认配置为最大资源限制，而 Amazon MQ 不提供覆盖资源限制配置的功能。

### 单实例代理的默认值



| 实例类型 | 每个节点的连接数 | 每个节点的通道数 | 每个通道的使用者数 | 队列 | 虚拟主机 | Shovel | 交易所 | 以字节为单位的邮件大小 | 
| --- | --- | --- | --- | --- | --- | --- | --- | --- | 
| mq.m7g.medium | 100 | 500 | 10 | 500 | 10 | 30 | 500 | 524288 | 
| mq.m7g.large | 1500 | 4,500 | 10 | 1000 | 50 | 50 | 1000 | 524288 | 
| mq.m7g.xlarge | 3000 | 9,000 | 10 | 2000 | 100 | 100 | 2000 | 524288 | 
| mq.m7g.2xlarge | 6000 | 18000 | 10 | 4,000 | 150 | 200 | 4,000 | 524288 | 
| mq.m7g.4xlarge | 12000 | 36,000 | 10 | 8000 | 200 | 400 | 8000 | 524288 | 
| mq.m7g.8xlarge | 24,000 | 72,000 | 10 | 16000 | 250 | 800 | 16000 | 524288 | 
| mq.m7g.12xlarge | 36,000 | 108,000 | 10 | 24,000 | 300 | 1,200 | 24,000 | 524288 | 
| mq.m7g.16xlarge | 48,000 | 144,000 | 10 | 32000 | 350 | 1,600 | 32000 | 524288 | 

### 集群代理的默认值



| 实例类型 | 每个节点的连接数 | 每个节点的通道数 | 每个通道的使用者数 | 队列 | 虚拟主机 | Shovel | 交易所 | 以字节为单位的邮件大小 | 
| --- | --- | --- | --- | --- | --- | --- | --- | --- | 
| mq.m7g.medium | 100 | 300 | 10 | 100 | 10 | 10 | 100 | 524288 | 
| mq.m7g.large | 500 | 1500 | 10 | 1000 | 50 | 30 | 1000 | 524288 | 
| mq.m7g.xlarge | 1000 | 3000 | 10 | 2000 | 100 | 60 | 2000 | 524288 | 
| mq.m7g.2xlarge | 2000 | 6000 | 10 | 4,000 | 150 | 120 | 4,000 | 524288 | 
| mq.m7g.4xlarge | 4000 | 12000 | 10 | 8000 | 200 | 240 | 8000 | 524288 | 
| mq.m7g.8xlarge | 8000 | 24,000 | 10 | 16000 | 250 | 480 | 16000 | 524288 | 
| mq.m7g.12xlarge | 12000 | 36,000 | 10 | 24,000 | 300 | 720 | 24000 | 524288 | 
| mq.m7g.16xlarge | 16000 | 48,000 | 10 | 32000 | 350 | 960 | 32000 | 524288 | 

# 适用于 RabbitMQ 的亚马逊 MQ 资源上限上限
最大资源限制

您可以配置资源限制，最高可达下表所示的最大值。要了解如何更新经纪商的资源限制，请参阅[资源限制配置](configure-resource-limits.md)。

## 单实例部署的 m7g 带法定队列的规模调整指南
m7g 单实例部署的最大资源限制

下表列出了单实例代理的每种实例类型的**最大**限制值。


| 实例类型 | Connections | 渠道 | 每个通道的使用者数 | 队列 | 虚拟主机 | Shovel | 交易所 | 以字节为单位的邮件大小 | 
| --- | --- | --- | --- | --- | --- | --- | --- | --- | 
| mq.m7g.medium | 300 | 900 | 1000 | 2,500 | 10 | 150 | 12500 | 134217728 | 
| mq.m7g.large | 5000 | 15000 | 1000 | 20000 | 1500 | 250 | 100000 | 134217728 | 
| mq.m7g.xlarge | 10000 | 30000 | 1000 | 30000 | 1500 | 500 | 15万 | 134217728 | 
| mq.m7g.2xlarge | 20000 | 60000 | 1000 | 40000 | 1500 | 1000 | 200,000 | 134217728 | 
| mq.m7g.4xlarge | 40000 | 120,000 | 1000 | 60000 | 1500 | 2000 | 300,000 | 134217728 | 
| mq.m7g.8xlarge | 80,000 | 240,000 | 1000 | 80,000 | 1500 | 4000 | 400,000 | 134217728 | 
| mq.m7g.12xlarge | 120,000 | 360,000 | 1000 | 100000 | 1500 | 6000 | 500,000 | 134217728 | 
| mq.m7g.16xlarge | 160000 | 480,000 | 1000 | 120,000 | 1500 | 8000 | 600,000 | 134217728 | 

## 集群部署的 m7g 带法定队列的规模调整指南
m7g 集群部署的最大资源限制

下表列出了集群代理的每种实例类型的**最大**限制值。


| 实例类型 | 每个节点的连接数 | 每个节点的通道数 | 每个通道的使用者数 | 队列 | 虚拟主机 | Shovel | 交易所 | 以字节为单位的邮件大小 | 
| --- | --- | --- | --- | --- | --- | --- | --- | --- | 
| mq.m7g.medium | 300 | 900 | 1000 | 500 | 10 | 50 | 500 | 134217728 | 
| mq.m7g.large | 5000 | 15000 | 1000 | 10000 | 1500 | 150 | 50000 | 134217728 | 
| mq.m7g.xlarge | 10000 | 30000 | 1000 | 15000 | 1500 | 300 | 75000 | 134217728 | 
| mq.m7g.2xlarge | 20000 | 60000 | 1000 | 20000 | 1500 | 600 | 100000 | 134217728 | 
| mq.m7g.4xlarge | 40000 | 120,000 | 1000 | 30000 | 1500 | 1200 | 15万 | 134217728 | 
| mq.m7g.8xlarge | 80,000 | 240,000 | 1000 | 40000 | 1500 | 2400 | 200,000 | 134217728 | 
| mq.m7g.12xlarge | 120,000 | 360,000 | 1000 | 50000 | 1500 | 3600 | 250,000 | 134217728 | 
| mq.m7g.16xlarge | 160000 | 480,000 | 1000 | 60000 | 1500 | 4,800 | 300,000 | 134217728 | 

## M5 单实例部署的最大资源限制


下表列出了单实例代理的每种实例类型的**最大**限制值。


| 实例类型 | Connections | 渠道 | 每个通道的使用者数 | 队列 | 虚拟主机 | Shovel | 
| --- | --- | --- | --- | --- | --- | --- | 
| m5.large | 5000 | 15000 | 1000 | 30000 | 1500 | 250 | 
| m5.xlarge | 10000 | 30000 | 1000 | 60000 | 1500 | 500 | 
| m5.2xlarge | 20000 | 60000 | 1000 | 120,000 | 1500 | 1000 | 
| m5.4xlarge | 40000 | 120,000 | 1000 | 240,000 | 1000 | 2000 | 

# m5 集群部署的最大资源限制


下表列出了集群代理的每种实例类型的**最大**限制值。


| 实例类型 | 队列 | 每个通道的使用者数 | Shovel | 
| --- | --- | --- | --- | 
| m5.large | 10000 | 1000 | 150 | 
| m5.xlarge | 15000 | 1000 | 300 | 
| m5.2xlarge | 20000 | 1000 | 600 | 
| m5.4xlarge | 30000 | 1000 | 1200 | 

以下连接和通道限制按节点应用：


| 实例类型 | Connections | 渠道 | 
| --- | --- | --- | 
| m5.large | 5000 | 15000 | 
| m5.xlarge | 10000 | 30000 | 
| m5.2xlarge | 20000 | 60000 | 
| m5.4xlarge | 40000 | 120,000 | 

集群代理的确切限制值可能低于指示值，具体取决于可用节点的数量以及 RabbitMQ 在可用节点之间分配资源的方式。如果超过限制值，则可以创建与其他节点的新连接并重试，也可以升级实例大小以增加最大限制

## 错误消息


 超过限制时，将返回以下错误消息。所有值均基于 **m7.large** 单实例限制。

**注意**  
以下消息的错误代码可能会根据您使用的客户端库而变化。

**Connection**

`ConnectionClosedByBroker 500 "NOT_ALLOWED - connection refused: node connection limit (5000) is reached"`

**Channel**

`ConnectionClosedByBroker 1500 "NOT_ALLOWED - number of channels opened on node 'rabbit@ip-10-0-23-173.us-west-2.compute.internal' has reached the maximum allowed limit of (15,000)"`

**使用者**

`ConnectionClosedByBroker: (530, 'NOT_ALLOWED - reached maximum (1,000) of consumers per channel')`

**最大邮件大小**

` (406, 'PRECONDITION_FAILED - message size 524289 is larger than configured max size 524288') `

**交易所**

` (406, "PRECONDITION_FAILED - cannot declare exchange 'limit_test_3' in vhost '/': exchange limit of 10 is reached") `

**注意**  
以下错误消息使用 HTTP 管理 API 格式。

**队列**

`{"error":"bad_request","reason":"cannot declare queue 'my_queue': queue limit in cluster (10,000) is reached"}]`

**Shovel**

`{"error":"bad_request","reason":"Validation failed\n\ncomponent shovel is limited to 150 per node\n"}`

**Vhost**

`{"error":"bad_request","reason":"cannot create vhost 'my_vhost': vhost limit of 1500 is reached"}`

# Amazon MQ for RabbitMQ 代理默认值
代理默认设置

当您为 RabbitMQ 代理创建 Amazon MQ 时，Amazon MQ 会应用一组默认的代理策略和虚拟主机限制来优化代理的性能。Amazon MQ 仅将虚拟主机限制应用于默认的（`/`）虚拟主机。Amazon MQ 不会将默认策略应用于新创建的虚拟主机。建议为所有新的和现有的代理保留这些默认值。但是，您可以随时修改、覆盖或删除这些默认设置。

亚马逊 MQ 为 RabbitMQ 3 和 RabbitMQ 4 的亚马逊 MQ 创建了不同的代理策略和虚拟主机限制。以下小节将详细讨论这些差异。

Amazon MQ 根据您在创建代理时选择的实例类型和代理部署模式创建策略和限制。默认策略根据部署模式命名，如下所示：

**适用于 RabbitMQ 的亚马逊 MQ 3：**
+ **单实例** – `AWS-DEFAULT-POLICY-SINGLE-INSTANCE`
+ **集群部署** — `AWS-DEFAULT-POLICY-CLUSTER-MULTI-AZ` && `AWS-DEFAULT-QUORUM-QUEUES-POLICY-CLUSTER-MULTI-AZ`

**适用于 RabbitMQ 的亚马逊 MQ 4：**
+ **单实例** – `AWS-DEFAULT-POLICY-SINGLE-INSTANCE`
+ **集群部署** — `AWS-DEFAULT-POLICY-CLUSTER` && `AWS-DEFAULT-QUORUM-QUEUES-POLICY-CLUSTER-MULTI-AZ`

对于[单实例代理](rabbitmq-broker-architecture.md#rabbitmq-broker-architecture-single-instance)，Amazon MQ 会将策略优先级值设置为 `0`。要覆盖默认优先级值，可以创建具有较高优先级值的自定义策略。对于[集群部署](rabbitmq-broker-architecture.md#rabbitmq-broker-architecture-cluster)，Amazon MQ 将优先级值设置为代理默认值 `1`。要为集群创建您自己的自定义策略，请分配一个大于 `1` 的优先级值。

**注意**  
在集群部署中，经典镜像和高可用性（HA）需要 `ha-mode` 和 `ha-sync-mode` 代理策略。这些设置仅适用于 RabbitMQ 3 的亚马逊 MQ，不适用于 RabbitMQ 4。  
如果删除默认 `AWS-DEFAULT-POLICY-CLUSTER-MULTI-AZ` 策略，Amazon MQ 将使用 `ha-all-AWS-OWNED-DO-NOT-DELETE` 策略，优先级值为 `0`。这可以确保所需的 `ha-mode` 和 `ha-sync-mode` 策略仍然有效。如果您创建自己的自定义策略，Amazon MQ 自动将 `ha-mode` 和 `ha-sync-mode` 添加到您的策略定义。

**Topics**
+ [

## 策略和限制说明
](#rabbitmq-defaults-descriptions)
+ [

## 建议的默认值
](#rabbitmq-defaults-values)

## 策略和限制说明


以下列表描述了 Amazon MQ 应用于新创建的代理的默认策略和限制。`max-length`、`max-queues` 和 `max-connections` 的值因代理的实例类型和部署模式而异。这些值列于[建议的默认值](#rabbitmq-defaults-values)部分。

**RabbitMQ 3 和 RabbitMQ 4 经纪人的设置**
+ **`queue-mode: lazy`**（策略）– 启用延迟队列。默认情况下，队列会在内存中保留消息缓存，从而使代理能够尽快将消息传递给使用者。这可能会导致代理内存不足并引发高内存警报。延迟队列尝试在可行的情况下尽早将消息移动到磁盘。这意味着在正常操作条件下保留在内存中的消息更少。使用延迟队列，Amazon MQ for RabbitMQ 可以支持更大的邮件负载和更长的队列。请注意，对于某些用例，具有延迟队列的代理可能会稍慢一些。这是因为消息从磁盘移动到代理，而不是从内存中的缓存传递消息。
**部署模式**  
单实例、集群
+ **`max-length: number-of-messages`**（策略）– 设置队列中的消息数量的限制。在集群部署中，该限制可防止在代理重启或维护时段之后暂停队列同步。
**部署模式**  
Cluster
+ **`overflow: reject-publish`**（策略）– 使用 `max-length` 策略强制队列在队列中的消息数达到 `max-length` 值后拒绝新消息。为了确保队列处于溢出状态时消息不会丢失，向代理发布消息的客户端应用程序必须实施[发布者确认](best-practices-message-reliability.md#configure-confirmation-acknowledgement)。有关实施发布者确认的信息，请参阅 RabbitMQ 网站上的[发布者确认](https://www.rabbitmq.com/confirms.html#publisher-confirms)。
**部署模式**  
Cluster

**RabbitMQ 3 的特定设置**
+ **`max-queues: number-of-queues-per-vhost`**（虚拟主机限制）– 设置代理中队列数的限制。与`max-length`策略定义类似，限制集群部署中的队列数量可防止在代理重新启动或维护时段后暂停队列同步。限制队列还可防止过多使用 CPU 来维护队列。
**部署模式**  
单实例、集群
+ **`max-connections: number-of-connections-per-vhost`**（虚拟主机限制）– 设置连接代理的客户端数量限制。根据建议的值限制连接数可防止使用过多的代理内存，以免导致代理产生高内存警报和暂停操作。
**部署模式**  
单实例、集群

## 建议的默认值


**重要**  
 `max-queues``max-connections`并且仅适用于 RabbitMQ 3 的亚马逊 MQ。

**注意**  
`max-length` 和 `max-queue` 默认限制将根据平均邮件大小 5KB 进行测试和评估。如果您的消息大于 5KB，则需要调整和减少 `max-length` 和 `max-queue` 限制。

下表列出了新创建的代理的默认限制值。Amazon MQ 根据代理的实例类型和部署模式应用这些值。

[\[See the AWS documentation website for more details\]](http://docs.amazonaws.cn/amazon-mq/latest/developer-guide/rabbitmq-defaults.html)


| 实例类型 | Deployment mode (部署模式) | `max-length` | `max-queues` | `max-connections` | 
| --- | --- | --- | --- | --- | 
| t3.micro | 单实例 | 不适用 | 500 | 500 | 
| m5.large | 单实例 | 不适用 | 20000 | 4,000 | 
| m5.large | Cluster | 8,000,000 | 10000 | 15000 | 
| m5.xlarge | 单实例 | 不适用 | 30000 | 8000 | 
| m5.xlarge | Cluster | 90000,000 | 10000 | 20000 | 
| m5.2xlarge | 单实例 | 不适用 | 60000 | 15000 | 
| m5.2xlarge | Cluster | 10,000,000 | 10000 | 40000 | 
| m5.4xlarge | 单实例 | 不适用 | 15万 | 30000 | 
| m5.4xlarge | Cluster | 12,000,000 | 10000 | 100000 | 