3

我设置了两个节点,A 和 B。两者都安装了联合插件的 RabbitMQ。

从 Web UI 中,我可以看到“联合状态”>“状态”在 A 和 B 上“正在运行”。

在 A 上,我创建了一个名为“test1”的队列。

在 B 上,我可以看到“test1”队列(从 A 复制)。

在 A 上,我添加了一条消息。

但是,消息不会出现在 B 上的复制队列中 - 消息保留在 A 上。

这是我在 A 和 B 上使用的策略:

rabbitmqctl set_policy --apply-to exchanges my-queue "test1" \ '{"federation-upstream-set":"all"}'

所以,就像这样:A(上游)-> B(下游)和 B(上游)-> A(下游)

我应该看到复制到 A 和 B 的消息吗?我是否错误配置了路线?

4

1 回答 1

12

但是,消息不会出现在 B 上的复制队列中 - 消息保留在 A 上。

TL;DR:联合交换!=联合队列。

参考:

联合队列的工作原理”部分解释说:

“ 联邦队列只有在本地消息用完、有消费者需要消息、上游队列有“备用”消息没有被消费时才会检索消息……”

联合交易所做什么?解释说:

“ ...发布到上游交易所的消息被复制到联合交易所,就好像它们直接发布到它一样......”

回顾:

  • 如果您使用联合队列,则需要 B 端的消费者需要消息(拉模型?)。
  • 如果您使用联合交换,则直接复制消息(推送模型?)。

用例

冗余/备份

联合交换复制消息(max-hops副本),因此它们可以用于冗余。

例如

这是我的数据,备份一下。

内容分发网络

联合交换复制消息(max-hops副本),因此它们可用于跨区域分发内容(顺便说一句,这也是冗余),前提是您正确配置了拓扑。

例如

大家好,请应用此安全补丁,您可以在离您最近的经纪人处找到该补丁。

负载均衡

联合队列可用于负载平衡:如果一条消息在上游可用并且那里没有消费者可以处理它,则下游的自由消费者能够接收该消息并对其进行处理。摇滚吧。

例如

我是电脑,感觉很无聊,有什么可以帮忙的吗?你有什么工作需要我做吗?

双重打击

联合交换 + 联合队列 = 可以将同一组任务分发到多个区域(集群),每个集群中的一个工作人员可以执行该工作。

例如

现在是本季度末,我需要每个区域(集群)的绩效指标,每个商店经理(集群中的一个节点)将汇总指标(集群内部),我们将向前 3 名赠送礼品卡。

于 2014-12-11T07:29:21.220 回答