联邦允许在代理之间传输消息,无需集群。
联邦地址可以将从上游地址发布的消息复制到本地地址。注意:这仅适用于多播地址。
联邦队列允许本地消费者从上游队列接收消息。
代理可以包含联邦组件和仅本地组件 - 如果您不想联邦所有内容,则无需这样做。
1. 优势
1.1. WAN
源服务器和目标服务器不必位于同一集群中,这使得联邦适用于可靠地将消息从一个集群发送到另一个集群,例如跨 WAN、跨云区域或连接可能不可靠的地方。
联邦具有内置的故障恢复能力,因此如果目标服务器连接丢失,例如由于网络故障,联邦将尝试重新连接到目标,直到它重新上线。当它重新上线时,它将恢复正常运行。
1.3. 动态和选择性
联邦通过策略应用,策略匹配地址和队列名称,然后应用。
这意味着联邦可以在添加和删除队列或地址时动态应用,无需单独配置它们。
同样,策略是选择性的。它们适用于多个包含和排除匹配。
多个策略可以直接应用于多个上游。策略可以分组到策略集中,然后应用于上游以简化管理。
2. 地址联邦
地址联邦类似于通过连接的代理进行的完全多播。发送到 Broker-A
上地址的每条消息都将传递到该代理上的每个队列,但也将传递到 Broker-B
及其所有连接的队列。
有关更多详细信息,请参见 地址联邦。
3. 队列联邦
联邦队列充当具有多个机器上的多个接收器的单个逻辑队列。它们可用于负载均衡。如果代理位于同一个可用区,您将考虑将它们集群。队列联邦的优势是它不需要集群,因此适用于跨 WAN、跨区域或内部/外部使用。
有关更多详细信息,请参见 队列联邦。
4. WAN 全网格
还可以提供代理的 WAN 网格,它可以
-
通过地址联邦复制
-
使用队列联邦进行路由和负载均衡
-
链接远程生产者和消费者
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-1
和 eu-west-1
。将队列联邦应用于队列 federated_queue
,并将地址联邦应用于地址 federated_address
。
联邦名称必须全局唯一。
您可以应用许多配置选项。这些在各个文档中都有详细介绍
来自连接器引用 URI 的额外参数可用于覆盖或为 ServiceLocator 提供额外的配置。 |
5.1. 大消息
如果联邦必须处理大消息,则需要更改消费者默认的 ackBatchSize
和 consumerWindowSize
以限制正在传输的消息数量并启用大消息流。这些选项可以作为参数提供给引用的连接器 URI,例如
tcp://<host>:<port>?ackBatchSize=100&consumerWindowSize=-1