跳到主要内容
版本:4.1

Federation 参考

概述

本指南提供了一个关于定义与联合(Federation)相关的各种参数时,可以设置的所有字段的参考。

请参考其他与联合相关的指南,以了解概念以及如何开始使用。

配置参考

策略

策略可以将上游集合(包括隐式定义的名为“all”的上游集合)或单个上游应用于一组交换机和/或队列。

应用所有上游

rabbitmqctl set_policy federate-me '^federated\.' '{"federation-upstream-set":"all"}'

应用命名的上游集合

rabbitmqctl set_parameter federation-upstream-set location-1 '[{"upstream": "up-1"}, {"upstream": "up-2"}]'

rabbitmqctl set_policy federate-me '^federated\.' '{"federation-upstream-set":"location-1"}'

应用单个上游

rabbitmqctl set_policy federate-me '^federated\.' '{"federation-upstream":"up-1"}'

请注意,您不能在策略中同时使用 federation-upstreamfederation-upstream-set 键。有关策略的更多详细信息,请参阅策略文档。

上游

federation-upstream 参数指定如何连接到远程节点或集群,以及链路(连接)的某些属性。上游使用 rabbitmqctl set_parameter federation-upstream 命令定义,该命令接受上游名称和上游定义 JSON 对象。

rabbitmqctl set_parameter federation-upstream 'name' 'json-object'

上游定义对象可以包含以下键

适用于 Federated Exchanges 和 Queues

参数名称描述
uri

上游的 AMQP URI(s)。有关底层客户端库扩展(包括 TLS 的扩展),请参阅 查询参数参考,这些扩展可用于 Federation。

该值可以是字符串或字符串列表。如果提供多个字符串,则 Federation 插件将在尝试连接时从列表中随机选择一个 URI。这可用于连接到上游集群,并确保在某个节点发生故障时,链路最终会找到另一个节点。所有 URI 都假定指向单个集群中的节点。要同时连接到不同集群中的多个端点,请使用多个上游。

prefetch-count

任何给定时间链路上的最大未确认交付数。默认值为 1000。增加此值可以提高链路吞吐量,但也会导致链路的内存使用量增加。

reconnect-delay

断开连接后,等待重新连接到 Broker 的持续时间(以秒为单位)。默认值为 1。

ack-mode

确定链路应如何确认消息。如果设置为 on-confirm(默认值),则在下游确认消息后,向上游 Broker 确认消息。这可以处理网络错误和 Broker 故障而不会丢失消息,但也是最慢的选项。

如果设置为 on-publish,则在下游发布消息后,向上游 Broker 确认消息。这可能会在发生网络或 Broker 故障时丢失消息。

如果设置为 no-ack,则不使用消息确认。这是最快的选项,但可能会在发生网络或 Broker 故障时丢失消息。

trust-user-id

确定 Federation 应如何与 validated user-id 功能交互。如果设置为 true,则 Federation 将传递来自上游的任何经过验证的用户 ID,即使它本身无法验证它。如果设置为 false 或未设置,它将清除遇到的任何经过验证的用户 ID。仅当您信任上游服务器(以及扩展而言,其所有上游)不会伪造用户 ID 时,才应将其设置为 true

仅适用于 Federated Exchanges

以下上游参数仅适用于 Federated Exchanges

参数名称描述
exchange

上游交换机的名称。默认值是使用与 Federated Exchange 相同的名称。

max-hops

发布到 Federated Exchange 的消息在被丢弃之前可以遍历的最大 Federation 链路数。默认值为 1。请注意,即使 max-hops 设置为大于 1 的值,由于在环路中传播,消息也永远不会访问同一节点两次。但是,如果消息可以通过多条路由从源传播到目标,则消息仍可能重复。

queue-type

交换机 Federation 使用的内部上游队列的队列类型。

默认为 classic(单副本队列类型)。设置为 quorum 以使用复制队列类型

默认情况下,更改队列类型将删除并重新创建上游队列。这可能会导致消息在重新声明期间丢失或未路由到任何地方。为避免这种情况,请将 resource-cleanup-mode 键设置为 never。这需要手动删除旧的上游队列,以便可以使用新类型重新创建它。

自以下版本可用:3.13.1

resource-cleanup-mode

当 Federation 链路停止时,是否删除内部上游队列

默认情况下,当 Federation 链路停止时,内部上游队列会立即删除。设置为 never 以保留上游队列并收集消息,即使在更改 Federation 配置时也是如此。

expires

如果与上游的连接丢失,Federated Exchange 的上游队列可能被删除的过期时间(以毫秒为单位)。默认值为 'none',表示不会对队列应用过期。

此设置控制上游队列在连接丢失后,在符合删除条件之前将持续多长时间。

此值控制上游队列的 TTL 设置

message-ttl

Federated Exchange 的上游队列中消息的过期时间(参见 expires),以毫秒为单位。默认值为 'none',表示消息永不过期。这不适用于 Federated Queues。

此值控制上游队列中消息的 TTL 设置

仅适用于 Federated Queues

参数名称描述
queue

上游队列的名称。默认值是使用与 Federated Queue 相同的名称。

consumer-tag

从上游消费时要使用的消费者标签。可选。

上游集合

每个 upstream-set 都是一组上游。使用集合并在 Federation 策略定义中引用它可能比重复列出上游更方便。

# up-1 and up-2 are previously declared upstreams
rabbitmqctl set_parameter federation-upstream-set location-1 '[{"upstream": "up-1"}, {"upstream": "up-2"}]'

JSON 对象支持的键是

参数名称描述
upstream

上游的名称。必需。

此外,上游的任何属性都可以在上游集合中被覆盖。

有一个隐式定义的上游集合 all,其中包含在目标虚拟主机中创建的所有上游。

集群名称

Federation 插件使用服务器内定义的集群名称来标识自身在 Federation 图中的其他节点。默认值由 RabbitMQ 节点名称和形成集群的第一个节点的完全限定域名构成。

可以使用以下命令更改此设置

rabbitmqctl set_cluster_name

命令或通过管理 UI。

如果您的 DNS 不会为计算机提供不同的名称,则显式指定此名称非常重要。

这是一个例子

rabbitmqctl set_cluster_name "east1-production"
© . All rights reserved.