我设置了两个节点,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的消息吗?我错误配置了方向吗?
但是,消息不会出现在B上的复制队列中 - 消息保留在A上.
参考文献:
https://www.rabbitmq.com/federated-exchanges.html
https://www.rabbitmq.com/federated-queues.html
联邦队列中的" 工作原理 "部分解释了:
"联合队列只会在本地消息用完时检索消息,消费者需要消息,而上游队列有"备用"消息没有消耗......"
而在" 什么是联合交换吗? "解释说:
"...发布到上游交换机的消息被复制到联邦交易所,好像它们是直接发布给它的......"
如果你使用联邦队列,你需要B方面需要消息的消费者(拉模型?).
如果您使用联合交换,则直接复制消息(推模型?).
联合交换复制消息(max-hops
副本),以便它们可用于冗余.
例如
这是我的数据,备份它.
联合交换会复制邮件(max-hops
副本),以便它们可以用于跨区域分发内容(这也是冗余btw),前提是您正确配置了拓扑.
例如
大家好,请申请这个安全补丁,你可以在离你最近的经纪人那里找到.
联合队列可用于负载平衡:如果消息在上游可用且没有消费者可以处理它,则下游的免费消费者能够接收消息并对其进行处理.摇滚.
例如
我是电脑,我觉得无聊,我可以帮你吗?你需要我做的任何工作吗?
联合交换+联合队列=您可以将同一组任务分发到多个区域(群集),每个群集中的一个工作人员可以执行该作业.
例如
在本季度结束时,我需要每个区域(集群)的性能指标,每个商店经理(集群中的一个节点)将聚合指标(集群内部),我们将礼品卡提供给前3名.