

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

# Amazon MQ 代理网络
<a name="network-of-brokers"></a>

Amazon MQ 支持 ActiveMQ 代理网络功能。

 代理网络由多个同时活跃的单实例代理或 active/standby 代理组成。创建代理网络可以通过多个代理实例提高可用性、容错能力和负载平衡。

## 代理网络如何工作？
<a name="how-does-it-work"></a>

 代理网络通过使用*网络连接器*将一个代理连接到另一个代理来建立。网络连接器提供从一个代理到另一个代理的按需消息传递。网络连接器在代理配置中配置为*非双工*或*双工*连接。对于非双工连接，消息仅从一个代理转发到另一个代理。对于双工连接，消息在两个代理之间双向转发。

 如果网络连接器配置为双工，消息也会从 *Broker2* 转发到 *Broker1*。

 您可以在代理网络中同时使用非双工和双工连接。您可能希望引入到另一个代理的双工连接以改善流量，或避免限制增加。双工连接对于从本地到 Amazon MQ 托管代理的部分迁移也很有用。

## 代理网络如何处理凭据？
<a name="how-does-it-handle-credentials"></a>

要使代理 A 连接到网络中的代理 B，代理 A 必须使用有效的凭据，就像任何其他创建者或使用者一样。您不必在代理 A 的 `<networkConnector>` 配置中提供密码，而必须首先在代理 A 上创建一个与代理 B 上的另一个用户具有相同值的用户（这些用户是共享相同用户名和密码值的*独立且唯一的*用户）。当您在 `<networkConnector>` 配置中指定 `userName` 属性时，Amazon MQ 将在运行时自动添加密码。

**重要**  
请勿为 `<networkConnector>` 指定 `password` 属性。我们不建议在代理配置文件中存储明文密码，因为这会使密码在 Amazon MQ 控制台中可见。有关更多信息，请参阅 [步骤 2：为您的代理配置网络连接器](amazon-mq-creating-configuring-network-of-brokers.md#creating-configuring-network-of-brokers-configure-network-connectors)。

## 跨区域
<a name="how-to-configure-cross-region"></a>

要配置跨 Amazon 区域的代理网络，请在这些区域部署代理，然后为这些代理的端点配置网络连接器。

![\[跨区域网状拓扑\]](http://docs.amazonaws.cn/amazon-mq/latest/developer-guide/images/amazon-mq-nob-cross-region.png)


要配置像此示例一样的代理网络，您可以将 `networkConnectors` 条目添加到 *Broker1* 和 *Broker4* 的配置中，以引用这些代理的线级终端节点。

*Broker1 的网络连接器：*

```
<networkConnectors>
    <networkConnector name="1_to_2" userName="myCommonUser" duplex="true"
        uri="static:(ssl://b-9876l5k4-32ji-109h-8gfe-7d65c4b132a1-2.mq.us-west-2.amazonaws.com:61617)"/>
    <networkConnector name="1_to_3" userName="myCommonUser" duplex="true"
        uri="static:(ssl://b-743c885d-2244-4c95-af67-a85017ff234e-3.mq.us-east-2.amazonaws.com:61617)"/>
    <networkConnector name="1_to_4" userName="myCommonUser" duplex="true"
        uri="static:(ssl://b-62a7fb31-d51c-466a-a873-905cd660b553-4.mq.us-east-2.amazonaws.com:61617)"/>
</networkConnectors>
```

*Broker2 的网络连接器：*

```
<networkConnectors>
    <networkConnector name="2_to_3" userName="myCommonUser" duplex="true"
        uri="static:(ssl://b-743c885d-2244-4c95-af67-a85017ff234e-3.mq.us-east-2.amazonaws.com:61617)"/>
</networkConnectors>
```

*Broker4 的网络连接器：*

```
<networkConnectors>
    <networkConnector name="4_to_3" userName="myCommonUser" duplex="true"
        uri="static:(ssl://b-743c885d-2244-4c95-af67-a85017ff234e-3.mq.us-east-2.amazonaws.com:61617)"/>
    <networkConnector name="4_to_2" userName="myCommonUser" duplex="true"
        uri="static:(ssl://b-9876l5k4-32ji-109h-8gfe-7d65c4b132a1-2.mq.us-west-2.amazonaws.com:61617)"/>      
</networkConnectors>
```

## 借助传输连接器进行的动态故障转移
<a name="transport-connectors"></a>

除了配置 `networkConnector` 元素，您还可以配置您的代理 `transportConnector` 选项以启用动态故障转移，以及在从网络中添加或删除代理后重新平衡连接。

```
<transportConnectors>
  <transportConnector name="openwire" updateClusterClients="true" rebalanceClusterClients="true" updateClusterClientsOnRemove="true"/>
</transportConnectors>
```

在本示例中，`updateClusterClients` 和 `rebalanceClusterClients` 均设置为 `true`。在这种情况下，系统会向客户端提供网络中的代理的列表，而且客户端会在有新代理加入时请求这些代理重新平衡。

可用选项：
+ `updateClusterClients`: 向客户端传递有关代理拓扑网络中的更改的信息。
+ `rebalanceClusterClients`: 导致客户端在有新代理添加到代理网络时跨这些代理重新平衡。
+ `updateClusterClientsOnRemove`: 在有代理离开代理网络时，更新客户端的拓扑信息。

当设置 `updateClusterClients` 为 true 时，客户端可以配置为连接到网络代理中的单个代理。

```
failover:(ssl://b-1234a5b6-78cd-901e-2fgh-3i45j6k178l9-1.mq.us-east-2.amazonaws.com:61617)
```

当新的经纪商连接时，它将收到网络 URIs 中所有经纪人的列表。如果连接到代理失败，它可以动态切换到在其连接时所提供的代理之一。

有关故障转移的更多信息，请参阅 Active MQ 文档中的[用于故障转移的代理端选项](http://activemq.apache.org/failover-transport-reference.html#FailoverTransportReference-Broker-sideOptionsforFailover)。