本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
亚马逊 MQ 经纪人网络
Amazon MQ 支持 ActiveMQ 代理网络功能。
代理网络由多个同时活动的单实例代理或主动/备用代理组成。您可以根据应用程序的需求(例如高可用性和可扩展性)在各种拓扑中配置代理网络(例如集中器hub-and-spokes、树形或网状)。例如,中心辐射型代理网络可以提高弹性,并在无法访问某个代理时保留消息。具有集中器拓扑的代理网络可以从接受传入消息的大量代理处收集消息,并将消息集中到更中心的代理,以更好地处理许多传入消息负载。
有关教程和详细配置信息,请参阅以下内容:
以下是使用代理网络的好处:
-
创建代理网络能让您通过添加代理实例来增加聚合吞吐量和最大创建者与使用者连接计数。
-
您可以通过允许创建者和使用者了解多个活动代理实例来确保更好的可用性。这能让他们在当前连接到的实例变得不可用时重新连接到新实例。
-
因为创建者和使用者可以立即重新连接到代理网络中的另一个节点,并且因为不需要等待备用代理实例被提升,所以代理网络中的客户端重新连接比主动/备用代理更快,更容易实现高可用性。
代理网络的工作原理是什么?
Amazon MQ 以多种方式支持 ActiveMQ 代理网络功能。首先,您可以编辑每个代理配置中的参数以创建代理网络,就像使用本机 ActiveMQ 一样。其次,Amazon MQ 提供了用于自动创建经 Amazon CloudFormation 纪人网络的示例蓝图。您可以直接从 Amazon MQ 控制台部署这些示例蓝图,也可以编辑相关的 Amazon CloudFormation 模板以创建自己的拓扑和配置。
通过使用网络连接器将一个代理连接到另一个代理来建立代理网络。建立连接后,这些代理提供消息转发。例如,如果 Broker1 建立到 Broker2 的网络连接器,则 Broker1 上的消息将被转发到 Broker2(如果该代理上有使用者可用于队列或主题)。如果网络连接器配置为 duplex
,则消息也会从 Broker2 转发到 Broker1。网络连接器是在代理配置中配置的。请参阅Amazon MQ Broker Configuration Parameters。例如,以下是代理配置中的示例 networkConnector
条目:
<networkConnectors>
<networkConnector name="connector_1_to_2" userName="myCommonUser" duplex="true"
uri="static:(ssl://b-1234a5b6-78cd-901e-2fgh-3i45j6k178l9-1.mq.us-east-2.amazonaws.com:61617)"/>
</networkConnectors>
代理网络确保消息从一个代理实例流向另一个代理实例,从而仅将消息转发给具有相应使用者的代理实例。为助益网络中彼此相邻的代理实例,ActiveMQ 向建议主题发送有关创建者和使用者连接到网络和从网络断开的消息。当代理实例接收有关从特定目标中使用的使用方的信息时,代理实例会开始转发消息。有关更多信息,请参阅 ActiveMQ 文档中的建议主题
代理网络如何处理凭据?
要使代理 A 连接到网络中的代理 B,代理 A 必须使用有效的凭据,就像任何其他创建者或使用者一样。您不必在代理 A 的 <networkConnector>
配置中提供密码,而必须首先在代理 A 上创建一个与代理 B 上的另一个用户具有相同值的用户(这些用户是共享相同用户名和密码值的独立且唯一的用户)。当您在 <networkConnector>
配置中指定 userName
属性时,Amazon MQ 将在运行时自动添加密码。
重要
请勿为 <networkConnector>
指定 password
属性。我们不建议在代理配置文件中存储明文密码,因为这会使密码在 Amazon MQ 控制台中可见。有关更多信息,请参阅 Configure Network Connectors for Your Broker。
经纪人必须处于相同状态VPC或处于对等状态。VPCs有关更多信息,请参阅Creating and Configuring a Network of Brokers教程中的先决条件。
示例蓝图
要开始使用代理网络,Amazon MQ 提供示例蓝图。这些示例蓝图创建了经纪人网络部署,以及使用的所有相关资源。 Amazon CloudFormation可用的两个示例蓝图是:
-
单实例代理的网状网络
-
主动/备用代理的网状网络
从 Create Broker (创建代理) 页面中,选择其中一个示例蓝图,然后选择 Next (下一步)。创建资源后,在 Amazon MQ 控制台中查看生成的代理及其配置。
通过在代理配置中创建代理并配置不同的 networkConnector
元素,您可以在许多不同的拓扑中创建代理网络。有关配置网络代理的更多信息,请参阅 ActiveMQ 文档中的代理网络
代理网络拓扑
通过部署代理,然后在其配置中配置 networkConnector
条目,您可以构建使用不同网络拓扑的代理网络。网络连接器在连接的代理之间提供按需消息转发。可以将连接配置为双工,这样消息在代理之间双向转发,也可以配置为不是双工,这样转发仅从一个代理传播到另一个代理。例如,如果我们在 Broker1 和 Broker2 之间有双工连接,则消息将会在二者之间彼此转发(如果有使用者)。
有了双工网络连接器,消息将从每个代理转发到另一个代理。这些是按需转发的:如果 Broker2 上有用户想要获取 Broker1 上的消息,可转发该消息。同样,如果 Broker1 上的用户想要获取 Broker2 上的消息,也可转发该消息。
对于非双工连接,消息仅从一个代理转发到另一个代理。在本示例中,如果 Broker2 上的用户想要获取 Broker1 上的消息,可转发该消息。但是,消息不会从 Broker2 转发到 Broker1。
使用双工和非双工网络连接器,可以在任意数量的网络拓扑中构建代理网络。
注意
在每个网络拓扑示例中,networkConnector
元素都会引用它们连接到的代理的终端节点。将 uri
属性中的代理终端节点条目替换为代理的终端节点。请参阅Listing brokers and viewing broker details。
网状拓扑
网状拓扑提供了多个彼此连接的代理。这个简单的示例连接了三个单实例代理,但您可以将更多代理配置为网格。
此拓扑以及一个包含主动/备用代理对网格的拓扑,可以使用 Amazon MQ 控制台中的示例蓝图创建。您可以创建这些示例蓝图部署以查看正在工作的代理网络,并查看它们的配置方式。
您可以通过向 Broker1 添加网络连接器来配置这样的三个代理网状网络,该连接器与 Broker2 和 Broker3 都建立双工连接 ,在 Broker2 和 Broker3 之间建立单个双工连接。
Broker1 的网络连接器:
<networkConnectors>
<networkConnector name="connector_1_to_2" userName="myCommonUser" duplex="true"
uri="static:(ssl://b-9876l5k4-32ji-109h-8gfe-7d65c4b132a1-2.mq.us-east-2.amazonaws.com:61617)"/>
<networkConnector name="connector_1_to_3" userName="myCommonUser" duplex="true"
uri="static:(ssl://b-743c885d-2244-4c95-af67-a85017ff234e-3.mq.us-east-2.amazonaws.com:61617)"/>
</networkConnectors>
Broker2 的网络连接器:
<networkConnectors>
<networkConnector name="connector_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>
通过将上述连接器添加到 Broker1 和 Broker2 的配置中,您可以在这三个代理之间创建一个网格,从而在所有代理之间按需转发消息。有关更多信息,请参阅 Amazon MQ Broker Configuration Parameters。
中心辐射型拓扑
在中心辐射型拓扑中,如果轮辐上的任何代理中断,则会保留消息。消息对全程转发,而且只有中心的 Broker1 对网络的运行至关重要。
在本示例中,要配置代理的中心辐射网络,您可以在 Broker1 的配置中向辐条上的每个代理添加networkConnector
。
<networkConnectors>
<networkConnector name="connector_hub_and_spoke_2" userName="myCommonUser" duplex="true"
uri="static:(ssl://b-1234a5b6-78cd-901e-2fgh-3i45j6k178l9-1.mq.us-east-2.amazonaws.com:61617)"/>
<networkConnector name="connector_hub_and_spoke_3" userName="myCommonUser" duplex="true"
uri="static:(ssl://b-9876l5k4-32ji-109h-8gfe-7d65c4b132a1-2.mq.us-east-2.amazonaws.com:61617)"/>
<networkConnector name="connector_hub_and_spoke_4" userName="myCommonUser" duplex="true"
uri="static:(ssl://b-743c885d-2244-4c95-af67-a85017ff234e-3.mq.us-east-2.amazonaws.com:61617)"/>
<networkConnector name="connector_hub_and_spoke_5" userName="myCommonUser" duplex="true"
uri="static:(ssl://b-62a7fb31-d51c-466a-a873-905cd660b553-4.mq.us-east-2.amazonaws.com:61617)"/>
</networkConnectors>
集中器拓扑
在此示例拓扑中,底部的三个代理可以处理大量连接,这些消息集中到 Broker1 和 Broker2。每个其他代理都与更中心的代理建立非双工连接。要扩展此拓扑的容量,您可以添加接收消息的附加代理并将这些消息集中在 Broker1 和 Broker2 中。
要配置此拓扑,底部的每个代理都将包含一个网络连接器,用于连接其将消息集中到的每个代理。
Broker3 的网络连接器:
<networkConnectors>
<networkConnector name="3_to_1" userName="myCommonUser" duplex="false"
uri="static:(ssl://b-1234a5b6-78cd-901e-2fgh-3i45j6k178l9-1.mq.us-east-2.amazonaws.com:61617)"/>
<networkConnector name="3_to_2" userName="myCommonUser" duplex="false"
uri="static:(ssl://b-9876l5k4-32ji-109h-8gfe-7d65c4b132a1-2.mq.us-east-2.amazonaws.com:61617)"/>
</networkConnectors>
Broker4 的网络连接器:
<networkConnectors>
<networkConnector name="4_to_1" userName="myCommonUser" duplex="false"
uri="static:(ssl://b-1234a5b6-78cd-901e-2fgh-3i45j6k178l9-1.mq.us-east-2.amazonaws.com:61617)"/>
<networkConnector name="4_to_2" userName="myCommonUser" duplex="false"
uri="static:(ssl://b-1234a5b6-78cd-901e-2fgh-3i45j6k178l9-1.mq.us-east-2.amazonaws.com:61617)"/>
</networkConnectors>
Broker5 的网络连接器:
<networkConnectors>
<networkConnector name="5_to_1" userName="myCommonUser" duplex="false"
uri="static:(ssl://b-1234a5b6-78cd-901e-2fgh-3i45j6k178l9-1.mq.us-east-2.amazonaws.com:61617)"/>
<networkConnector name="5_to_2" userName="myCommonUser" duplex="false"
uri="static:(ssl://b-9876l5k4-32ji-109h-8gfe-7d65c4b132a1-2.mq.us-east-2.amazonaws.com:61617)"/>
</networkConnectors>
跨区域
要配置跨 Amazon 区域的代理网络,请在这些区域部署代理,然后为这些代理的端点配置网络连接器。
要配置像此示例一样的代理网络,您可以将 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-east-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-east-2.amazonaws.com:61617)"/>
</networkConnectors>
借助传输连接器进行的动态故障转移
除了配置 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 文档中的用于故障转移的代理端选项