RabbitMQ - 如何联合/镜像消息

  发布于 2022-12-08 19:42

我设置了两个节点,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 个回答
  • 但是,消息不会出现在B上的复制队列中 - 消息保留在A上.

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

    参考文献:

    https://www.rabbitmq.com/federated-exchanges.html

    https://www.rabbitmq.com/federated-queues.html

    联邦队列中的" 工作原理 "部分解释了:

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

    而在" 什么是联合交换吗? "解释说:

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

    概括:

    如果你使用联邦队列,你需要B方面需要消息的消费者(拉模型?).

    如果您使用联合交换,则直接复制消息(推模型?).

    用例

    冗余/备份

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

    例如

    这是我的数据,备份它.

    内容分发网络

    联合交换会复制邮件(max-hops副本),以便它们可以用于跨区域分发内容(这也是冗余btw),前提是您正确配置了拓扑.

    例如

    大家好,请申请这个安全补丁,你可以在离你最近的经纪人那里找到.

    负载均衡

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

    例如

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

    双重打击

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

    例如

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

    2022-12-11 02:09 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有