联邦允许在代理之间传输消息,无需集群。

联邦地址可以将从上游地址发布的消息复制到本地地址。注意:这仅适用于多播地址。

联邦队列允许本地消费者从上游队列接收消息。

代理可以包含联邦组件和仅本地组件 - 如果您不想联邦所有内容,则无需这样做。

1. 优势

1.1. WAN

源服务器和目标服务器不必位于同一集群中,这使得联邦适用于可靠地将消息从一个集群发送到另一个集群,例如跨 WAN、跨云区域或连接可能不可靠的地方。

联邦具有内置的故障恢复能力,因此如果目标服务器连接丢失,例如由于网络故障,联邦将尝试重新连接到目标,直到它重新上线。当它重新上线时,它将恢复正常运行。

1.2. 松耦合代理

联邦可以在不同管理域中的代理(或集群)之间传输消息

  • 它们可能具有不同的配置、用户和设置;

  • 它们可能运行在不同版本的 ActiveMQ Artemis 上

1.3. 动态和选择性

联邦通过策略应用,策略匹配地址和队列名称,然后应用。

这意味着联邦可以在添加和删除队列或地址时动态应用,无需单独配置它们。

同样,策略是选择性的。它们适用于多个包含和排除匹配。

多个策略可以直接应用于多个上游。策略可以分组到策略集中,然后应用于上游以简化管理。

2. 地址联邦

地址联邦类似于通过连接的代理进行的完全多播。发送到 Broker-A 上地址的每条消息都将传递到该代理上的每个队列,但也将传递到 Broker-B 及其所有连接的队列。

地址联邦

Address Federation

有关更多详细信息,请参见 地址联邦

3. 队列联邦

联邦队列充当具有多个机器上的多个接收器的单个逻辑队列。它们可用于负载均衡。如果代理位于同一个可用区,您将考虑将它们集群。队列联邦的优势是它不需要集群,因此适用于跨 WAN、跨区域或内部/外部使用。

队列联邦

Queue Federation

有关更多详细信息,请参见 队列联邦

4. WAN 全网格

还可以提供代理的 WAN 网格,它可以

  • 通过地址联邦复制

  • 使用队列联邦进行路由和负载均衡

  • 链接远程生产者和消费者

可能的完整联邦网格示例

WAN Full Mesh

5. 配置联邦

broker.xml 中的示例配置

<federations>
    <federation name="eu-north-1-federation">
        <upstream name="eu-west-1" user="westuser" password="32a10275cf4ab4e9">
           <static-connectors>
              <connector-ref>connector1</connector-ref>
           </static-connectors>
           <policy ref="policySetA"/>
        </upstream>
        <upstream name="eu-east-1" user="eastuser" password="32a10275cf4ab4e9">
           <discovery-group-ref discovery-group-name="ue-west-dg"/>
           <policy ref="policySetA"/>
        </upstream>

        <policy-set name="policySetA">
           <policy ref="address-federation" />
           <policy ref="queue-federation" />
        </policy-set>

        <queue-policy name="queue-federation" >
           <exclude queue-match="federated_queue" address-match="#" />
        </queue-policy>

        <address-policy name="address-federation" >
           <include address-match="federated_address" />
        </address-policy>
    </federation>
</federations>

在上面的示例中,我们展示了为队列和地址配置到多个上游的联邦所需的 basic 关键参数。

该示例显示了代理 eu-north-1 连接到两个上游代理 eu-east-1eu-west-1。将队列联邦应用于队列 federated_queue,并将地址联邦应用于地址 federated_address

联邦名称必须全局唯一。

您可以应用许多配置选项。这些在各个文档中都有详细介绍

来自连接器引用 URI 的额外参数可用于覆盖或为 ServiceLocator 提供额外的配置。

5.1. 大消息

如果联邦必须处理大消息,则需要更改消费者默认的 ackBatchSizeconsumerWindowSize 以限制正在传输的消息数量并启用大消息流。这些选项可以作为参数提供给引用的连接器 URI,例如

tcp://<host>:<port>?ackBatchSize=100&consumerWindowSize=-1