1

在说 4 个节点 (N1-N4) 的 RabbitMQ Quorum Queue (使用 raft) 集群中,

我可以有一个只能从 N1/N2 读取的消费者吗?在这种情况下,N3 中产生的消息是否会通过 N1/N2 传递给消费者?

根据以下帖子中的文档: https ://www.cloudamqp.com/blog/2019-04-03-quorum-queues-internals-a-deep-dive.html

使用 Raft,所有读取和写入都通过一个领导者,该领导者的工作是将写入复制到其追随者。当客户端尝试读取/写入跟随者时,它会被告知领导者是谁,并被告知将所有写入发送到该节点。只有当一定数量的节点确认他们已将数据写入磁盘时,领导者才会确认写入客户端。仲裁只是节点的多数

如果是这种情况,如果只是领导节点来完成所有工作,如何实现扩展?

4

1 回答 1

1

首先,RabbitMQ 集群应该有奇数个节点,以便在网络分区的情况下始终可以建立多数。

消费者始终可以从RabbitMQ 集群中的任何节点读取数据。如果消费者连接的节点上没有运行队列主/镜像,则通信将被转发到另一个节点。

如果只是领导节点来完成所有工作,如何实现扩展?

“缩放”这个词太不具体了,我不敢回答这个问题。但我假设您问的是多个仲裁队列会发生什么。答案是每个队列都有自己的领导者,这些领导者分布在集群周围。


注意: RabbitMQ 团队会监控rabbitmq-users 邮件列表,有时只会在 StackOverflow 上回答问题。

于 2020-04-16T21:49:52.390 回答