我了解排队服务是如何单独工作的,但我不知道它如何在集群上工作?
是否将相同的消息发送到每个队列以减轻一个队列失败的损害?还是它们平衡了每个队列的负载?
此外,如果它们在每个队列上均达到负载平衡,那么是否消除了对诸如Celery之类的服务的需求?
谢谢
答案 0 :(得分:0)
来自Rabbitmq官方文档:
1-RabbitMQ之类的排队服务如何在集群上运行?
集群
RabbitMQ代理操作所需的所有数据/状态为 在所有节点上复制。消息队列是一个例外, 尽管它们是可见的,但默认情况下位于一个节点上 从所有节点均可访问。在服务器中的节点之间复制队列 群集,请参见high availability上的文档(注意:本指南 是进行镜像的前提条件。
节点是对等的某些分布式系统具有领导者和 跟随者节点。对于RabbitMQ,通常情况并非如此。中的所有节点 RabbitMQ集群是同等的对等体: RabbitMQ核心。队列镜像时,本主题变得更加细微差别 和插件被考虑在内,但大多数情况下 目的,应将所有群集节点视为相等
2-如果一个队列失败,是否将相同的消息发送到每个队列以减轻损害?
队列镜像
默认情况下,位于RabbitMQ集群中的队列内容 在单个节点(声明队列的节点)上。这是 与交换和绑定相比,可以始终将其视为 在所有节点上。可以有选择地将队列镜像 多个节点。
每个镜像队列由一个主服务器和一个或多个镜像组成。 主节点托管在一个通常称为主节点的节点上。 每个队列都有其自己的主节点。给定队列的所有操作 首先应用于队列的主节点,然后传播到 镜子。这涉及排队发布,将消息传递到 消费者,跟踪消费者的回执等。
队列镜像意味着节点的集群。因此不是 建议在WAN中使用(当然,客户端仍然可以 尽可能远地连接)。
发布到队列的消息将复制到所有镜像。 使用者连接到主服务器,无论他们在哪个节点上 通过镜像丢弃已确认的消息进行连接 在主人那里。队列镜像因此提高了可用性,但是 不会在节点之间分配负载(所有参与节点都 所有工作)。
如果承载队列主服务器的节点发生故障,则最早的镜像将是 只要同步就可以晋升为新主人。不同步 也可以根据队列镜像参数来升级镜像。
通常使用多个术语来标识主要和 分布式系统中的二级副本。本指南通常使用 “主”指代队列的主副本,而“镜像”指代 二级副本。但是,您会发现此处使用了“从属”,并且 那里。这是因为RabbitMQ CLI工具历来一直在使用 术语“奴隶”是指次级。因此,这两个词都是 目前可以互换使用,但我们希望最终摆脱 传统术语。