

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

# 将策略应用于 Amazon MQ for RabbitMQ
<a name="rabbitmq-defaults-applying-policies"></a>

 您可以使用 Amazon MQ 推荐的默认值应用自定义策略和限制。如果已删除建议的默认策略和限制，并希望重新创建这些策略和限制，或者创建了其他虚拟主机并希望将默认策略和限制应用于新虚拟主机，则可以使用以下步骤。

**重要**  
 在 RabbitMQ 引擎版本 3.13 及以下版本的 Amazon MQ 上，当前的默认运营商政策是：  

```
vhost name pattern apply-to definition priority/ default_operator_policy_AWS_managed .* classic_queues {"ha-mode":"all","ha-sync-mode":"automatic","queue-version":2} 0
```
 在 4.0 及更高版本中，默认操作员政策已更改为：  

```
vhost name pattern apply-to definition priority/ default_operator_policy_AWS_managed .* classic_queues {"queue-version":2} 0
```
 此更改是必需的，因为 RabbitMQ 4 不支持经典队列镜像和 HA 策略设置。  
 不能创建同时适用于经典镜像队列和仲裁队列的策略。如果希望只将策略应用于仲裁队列，必须将 `--apply-to` 设置为 `quorum_queues`。如果您使用经典镜像队列和法定队列，必须创建一个包含 `--apply-to:classic_queues` 的独立策略以及一个法定队列策略。

**重要**  
 要执行下列步骤，您必须拥有具有管理员权限的 Amazon MQ RabbitMQ 代理用户。您可以使用第一次创建代理时创建的管理员用户，也可以使用之后可能创建的其他用户。下表提供了作为正则表达式（正则表达式）模式所需的管理员用户标签和权限。  


| 标签 | 读取正则表达式 | 配置正则表达式 | 写入正则表达式 | 
| --- | --- | --- | --- | 
| administrator | .\* | .\* | .\* | 
有关创建 RabbitMQ 用户和管理用户标记和权限的更多信息，请参阅[Amazon MQ for RabbitMQ 代理用户](rabbitmq-simple-auth-broker-users.md#rabbitmq-basic-elements-user)。

**使用 RabbitMQ Web 控制台应用默认策略和虚拟主机限制**

1. 登录 [Amazon MQ 控制台](https://console.aws.amazon.com/amazon-mq/)。

1. 在左侧导航窗格中，选择 **Brokers (代理)**。

1. 从代理列表中，选择要向其应用新策略的代理的名称。

1. 在代理详细信息页面的 **Connections (连接)** 部分，选择 **RabbitMQ web console (RabbitMQ Web 控制台)** URL。RabbitMQ Web 控制台可在新的浏览器选项卡或窗口中打开。

1. 使用您的代理管理员的用户名和密码登录 RabbitMQ Web 控制台。

1. 在 RabbitMQ Web 控制台页面顶部选择 **Admin (管理员)**。

1. 在 **Admin (管理员)** 页面的右侧导航窗格中，选择 **Policies (策略)**。

1. 在 **Policies (策略)** 页面上，您可以看到代理现有的 **User policies (用户策略)** 列表。在 **User policies (用户策略)** 下，展开 **Add / update a policy (添加/更新策略)**。

1. 要创建新的代理策略，请在 **Add / update a policy (添加/更新策略)** 下，执行以下操作：

   1. 对于 **Virtual host (虚拟主机)**，请从下拉列表中选择要将策略附加到的虚拟主机的名称。要选择默认虚拟主机，请选择 **/**。
**注意**  
如果尚未创建其他虚拟主机，则 RabbitMQ 控制台中不显示 **Virtual host (虚拟主机)** 选项，并且策略仅应用于默认虚拟主机。

   1. 对于 **Name (名称)**，请为您的策略输入名称，例如 **policy-defaults**。

   1. 在 **Pattern (模式)** 中，输入正则表达式模式 **.\***，以便策略匹配代理上的所有队列。

   1. 对于 **Apply to (应用于)**，从下拉列表中选择 **Exchanges and queues (交换器和队列)**。

   1. 对于 **Priority (优先级)**，输入一个大于应用于虚拟主机的所有其他策略的整数。您可以在任何给定时间将一组策略定义应用于 RabbitMQ 队列和交换器。RabbitMQ 选择具有最高优先级值的匹配策略。有关策略优先级以及如何组合策略的更多信息，请参阅 RabbitMQ 服务器文档中的[策略](https://www.rabbitmq.com/parameters.html#policies)。

   1. 对于 **Definition (定义)**，添加以下键/值对：
      + **queue-mode**=**lazy**。从下拉列表中选择 **String (字符串)**。
      + **overflow**=**reject-publish**。从下拉列表中选择 **String (字符串)**。
**注意**  
不适用于单实例代理。
      + **max-length**= **{{number-of-messages}}**。 根据代理{{number-of-messages}}的实例大小和部署模式（例如集群），替换为 [Amazon MQ 的推荐值](rabbitmq-defaults.md#rabbitmq-defaults-values)。**8000000** `mq.m7g.large`从下拉列表中选择 **Number (编号）**。
**注意**  
不适用于单实例代理。

   1. 选择 **Add / update policy (添加/更新策略)**。

1. 确认 **User policies (用户策略)** 列表中显示新策略。
**注意**  
对于集群代理，Amazon MQ 会自动应用 `ha-mode: all` 和 `ha-sync-mode: automatic` 策略定义。

1. 从右侧导航窗格中，选择 **Limits (限制)**。

1. 在 **Limits (限制)** 页面上，您可以看到代理现有的 **Virtual host limits (虚拟主机限制)** 列表。在 **Virtual host limits (虚拟主机限制)** 下，展开 **Set / update a virtual host limit (设置/更新虚拟主机限制)**。

1. 要创建新的虚拟主机限制，请在 **Set / update a virtual host limit (设置/更新虚拟主机限制)** 中，执行以下操作：

   1. 对于 **Virtual host (虚拟主机)**，请从下拉列表中选择要将策略附加到的虚拟主机的名称。要选择默认虚拟主机，请选择 **/**。

   1. 对于 **Limit (限制)**，从下拉选项中选择 **max-connections**。

   1. 对于 **Value (值)**，根据代理的实例大小和部署模式输入 [Amazon MQ 建议值](rabbitmq-defaults.md#rabbitmq-defaults-values)，例如，对于 `mq.m5.large` 集群输入 **15000**。

   1. 选择 **Set / update limit (设定/更新限制)**。

   1. 重复上述步骤，对于 **Limit (限制)**，从下拉选项中选择 **max-queue (最大队列数)**。

1. 确认新限制在 **Virtual host limits (虚拟主机限制)** 列表中显示。

**使用 RabbitMQ 管理 API 应用默认策略和虚拟主机限制**

1. 登录 [Amazon MQ 控制台](https://console.aws.amazon.com/amazon-mq/)。

1. 在左侧导航窗格中，选择 **Brokers (代理)**。

1. 从代理列表中，选择要向其应用新策略的代理的名称。

1. 在代理页面的 **Connections (连接)** 部分，记下 **RabbitMQ web console (RabbitMQ Web 控制台)** URL。这是您在 HTTP 请求中使用的代理终端节点。

1. 打开您选择的新终端或命令行窗口。

1. 要创建新的代理策略，请输入以下 `curl` 命令。此命令假定默认 `/` 虚拟主机上有一个队列，该队列编码为 `%2F`。要将策略应用到另一个虚拟主机，请将 `%2F` 替换为虚拟主机的名称。
**注意**  
用您的管理员登录凭据替换{{username}}和{{password}}。根据代理{{number-of-messages}}的实例大小和部署模式，替换为 [Amazon MQ 推荐值](rabbitmq-defaults.md#rabbitmq-defaults-values)。{{policy-name}}替换为保单的名称。{{broker-endpoint}}替换为您之前记下的 URL。

   ```
   curl -i -u {{username}}:{{password}} -H "content-type:application/json" -XPUT \
   -d '{"pattern":".*", "priority":1, "definition":{"queue-mode":lazy, "overflow":"reject-publish", "max-length":"{{number-of-messages}}"}}' \
   {{broker-endpoint}}/api/policies/%2F/{{policy-name}}
   ```

1. 要确认新策略已添加到您的代理的用户策略中，请输入以下 `curl` 命令以列出所有代理策略。

   ```
   curl -i -u {{username}}:{{password}} {{broker-endpoint}}/api/policies
   ```

1. 创建新的 `max-connections` 虚拟主机限制，请输入以下 `curl` 命令。此命令假定默认 `/` 虚拟主机上有一个队列，该队列编码为 `%2F`。要将策略应用到另一个虚拟主机，请将 `%2F` 替换为虚拟主机的名称。
**注意**  
用您的管理员登录凭据替换{{username}}和{{password}}。根据代理{{max-connections}}的实例大小和部署模式，替换为 [Amazon MQ 推荐值](rabbitmq-defaults.md#rabbitmq-defaults-values)。将代理终端节点替换为您之前记下的 URL。

   ```
   curl -i -u {{username}}:{{password}} -H "content-type:application/json" -XPUT \
   -d '{"value":"{{number-of-connections}}"}' \
   {{broker-endpoint}}/api/vhost-limits/%2F/max-connections
   ```

1. 要创建新的 `max-queues` 虚拟主机限制，请重复上一步，但修改 curl 命令，如下所示。

   ```
   curl -i -u {{username}}:{{password}} -H "content-type:application/json" -XPUT \
   -d '{"value":"{{number-of-queues}}"}' \
   {{broker-endpoint}}/api/vhost-limits/%2F/max-queues
   ```

1. 要确认新限制已添加到您的代理的虚拟主机限制，请输入以下 `curl` 命令以列出所有代理虚拟主机限制。

   ```
   curl -i -u {{username}}:{{password}} {{broker-endpoint}}/api/vhost-limits
   ```