RabbitMQ - 如何联合/镜像消息

时间:2014-12-01 02:18:46

标签: rabbitmq message-queue rabbitmq-exchange

我设置了两个节点,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的邮件?我错误配置了方向吗?

1 个答案:

答案 0 :(得分:9)

  

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

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

参考文献:

联邦队列的"How it works"部分解释了:

  

"联合队列只会在本地消息用完时检索消息,消费者需要消息,而上游队列具有"备用"未被消费的消息......"

"What does a federated exchange do?"解释了:

  

" ...发布到上游交易所的消息被复制到联邦交易所,好像它们直接发布到它..."

回顾一下:

  • 如果您使用联合队列, 你需要一个需要消息的B方消费者(拉模型?)。
  • 如果您使用联邦交换, 消息是直接复制的(推模型?)。

用例

冗余/备份

联合交换会复制邮件(max-hops份),以便它们可用于冗余。

E.g。

  

这是我的数据,备份它。

内容分发网络

联合交换会复制邮件(max-hops份),因此只要您正确配置拓扑,它们就可用于跨区域分发内容(这也是冗余btw)。

E.g。

  嘿大家,请申请这个安全补丁,你可以在离你最近的经纪人处找到。

负载均衡

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

E.g。

  

我是一台电脑,我觉得无聊,我可以帮助你吗?你需要我做的任何工作吗?

双重打击

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

E.g。

  

本季度末,我需要每个区域(集群)的性能指标,每个商店经理(集群中的一个节点)将聚合指标(集群内部),我们将提供礼品卡到前3名。

相关问题