

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

# 资源限制配置
<a name="configure-resource-limits"></a>

适用于 RabbitMQ 的亚马逊 MQ 支持从 RabbitMQ 4 开始配置代理资源限制。当您创建代理时，Amazon MQ 会自动将默认值应用于这些资源限制。这些默认值充当保护您的经纪商可用性的护栏，同时适应常见的客户使用模式。您可以通过更改限制配置值来自定义您的代理行为，以更好地满足您的特定工作负载要求。有关默认值和最大允许值的更多详细信息，请参阅[Amazon MQ for RabbitMQ 大小调整指南](rabbitmq-sizing-guidelines.md)。

## 资源名称和配置密钥
<a name="resource-limit-configuration-keys"></a>


| 资源名称 | 配置密钥 | 
| --- | --- | 
| Connection | connection\_max | 
| 频道 | channel\_max\_per\_node | 
| 队列 | cluster\_queue\_limit | 
| Vhost | vhost\_max | 
| Shovel | runtime\_parameters.limits.shovel | 
| Exchange | cluster\_exchange\_limit | 
| 每个渠道的消费者 | consumer\_max\_per\_channel | 
| 最大消息大小 | max\_message\_size | 

## 如何覆盖资源限制
<a name="override-resource-limits"></a>

您可以使用亚马逊 MQ API 和亚马逊 MQ 控制台来覆盖资源限制。

以下示例说明如何使用以下方法覆盖队列计数的默认限制 Amazon CLI：

```
aws mq update-configuration --configuration-id <config-id> --data "$(echo "cluster_queue_limit=500" | base64 --wrap=0)"
```

成功调用会创建配置修订版。您必须将配置与您的 RabbitMQ 代理关联并重新启动代理才能应用覆盖。欲了解更多详情，请参阅 [RabbitMQ Broker Configurations](rabbitmq-broker-configuration-parameters.md) 

## 配置中支持特定于实例的部分
<a name="section-support-configuration-data"></a>

在 RabbitMQ 4 中，亚马逊 MQ 支持配置数据中的章节。部分允许您在单个配置中定义特定于实例的资源限制。每个部分对应于特定的实例类型和部署模式组合。当您将配置与代理关联时，Amazon MQ 会自动为代理的实例类型和部署模式应用匹配部分。

**重要**  
分区支持仅在 RabbitMQ 4 上可用。如果您尝试将包含部分的配置应用于 RabbitMQ 3 代理，API 会返回。`BadRequestException`

**章节语法**

各节由双花括号分隔，格式如下：

```
{{<host-instance-family>.<size>.<mode>}}
```

该`mode`值表示部署模式：
+ `1`— 单实例代理
+ `3`— 集群代理

任何其他模式值均无效，并且 API 会返回错误。

以下示例显示了两种不同实例类型的配置数据，其中包含两个不同实例类型的部分：

```
connection_max = 1000

{{m7g.large.3}}
connection_max = 2000
{{m7g.large.3}}

{{m7g.xlarge.3}}
connection_max = 4000
{{m7g.xlarge.3}}
```

**分区中允许的配置密钥**

分区内仅支持以下资源限制配置密钥。在分区内添加任何其他配置密钥都会导致 API 错误。
+ `max_message_size`
+ `channel_max_per_node`
+ `connection_max`
+ `cluster_queue_limit`
+ `vhost_max`
+ `consumer_max_per_channel`
+ `runtime_parameters.limits.shovel`
+ `cluster_exchange_limit`

**章节优先规则**

当配置密钥同时出现在通用（顶级）部分和实例特定部分时，配置数据中稍后出现的值优先。例如，将以下配置应用于`m7g.large`集群代理将设置`connection_max`为`2000`：

```
connection_max = 1000

{{m7g.large.3}}
connection_max = 2000
{{m7g.large.3}}
```

反向顺序设置`connection_max`为`1000`，因为通用值排在最后：

```
{{m7g.large.3}}
connection_max = 2000
{{m7g.large.3}}

connection_max = 1000
```

**注意**  
如果配置数据未定义特定实例类型的值，则 Amazon MQ 将应用默认值。

**示例**

以下示例说明如何使用部分创建配置并使用将其与代理关联 Amazon CLI。

*使用分区更新配置*

运行以下命令以针对多种实例类型更新具有特定实例资源限制的配置：

```
aws mq update-configuration \
    --configuration-id <config-id> \
    --data "$(echo -e "connection_max = 1000\nchannel_max_per_node = 64\n\n{{m7g.large.3}}\nconnection_max = 2000\nchannel_max_per_node = 128\n{{m7g.large.3}}\n\n{{m7g.xlarge.3}}\nconnection_max = 4000\nchannel_max_per_node = 256\n{{m7g.xlarge.3}}" | base64 --wrap=0)"
```

此配置定义了以下值：
+ 通用默认值：`connection_max = 1000`和 `channel_max_per_node = 64`
+ `m7g.large`集群代理：`connection_max = 2000`和 `channel_max_per_node = 128`
+ `m7g.xlarge`集群代理：`connection_max = 4000`和 `channel_max_per_node = 256`

*将配置与代理关联*

更新配置后，将其与您的代理关联并重新启动代理以应用更改。运行如下命令：

```
aws mq update-broker \
    --broker-id <broker-id> \
    --configuration id=<config-id>,revision=<revision-number>
```

## 资源限制覆盖错误
<a name="resource-limit-override-errors"></a>

将配置值超出支持范围的代理关联或创建代理会导致类似于以下内容的错误响应：

```
Configuration Revision N for configuration:cluster_queue_limit has limit: of value: 100000000 larger than maximum allowed limit:5000
```

有关按实例类型和部署模式划分的默认值和最大支持范围，请参阅[默认资源限制](rabbitmq-resource-limits-configuration.md)和[适用于 RabbitMQ 的亚马逊 MQ 资源上限上限](rabbitmq-resource-hard-limit.md)。