配置仲裁队列

最近更新时间:2025-08-26 14:59:12

我的收藏
仲裁队列(Quorum Queue)是 RabbitMQ 3.8+ 引入的一种高可用队列类型,基于 Raft 共识算法实现多节点数据复制,确保消息的强一致性和持久化存储。与镜像队列不同,仲裁队列采用多数派写入机制(Quorum),即消息必须被集群中超过半数的节点确认后才会被视为成功写入,从而避免脑裂问题并提升数据安全性。

核心特点

强一致性:消息写入需多数节点确认,确保数据不丢失。
自动故障转移:主节点宕机时,Raft 协议自动选举新主,恢复服务。
持久化优先:所有消息默认持久化到磁盘,适合关键业务。
不支持部分特性:如 TTL、优先级、非持久化消息等。

应用场景

金融交易系统(如支付结算):要求消息绝对不丢失,容忍较高延迟。
医疗数据同步:需严格保证数据一致性,避免因节点故障导致信息错误。
长期存在的核心业务队列(如订单状态更新):队列生命周期长,且需跨节点容灾。
跨机房部署:Raft 协议降低脑裂风险,适合多数据中心场景。

约束与限制

当前仅开源托管版集群支持配置仲裁队列,Serverless 版是分布式高可用集群,无需配置。

配置仲裁队列

2. 在左侧导航栏选择集群管理 > Queue,选择 Vhost 后,单击新建进入创建 Queue 页面。
3. 按照页面指引填写完 Queue 的信息后,单击提交,完成 Queue 创建。

分类
参数
是否必选
说明
基本信息
当前 Vhost
表示正在给哪个 Vhost 创建 Queue。
Queue 名称
填写 Queue 名称,需符合命名规则:1-64个字符,只能包含字母、数字、“-”及“_”。
Queue 创建成功后,不支持修改名称。
类型
选择 Quorum 队列
节点
在下拉框中选择 Queue 所在的集群节点。
Queue 说明
填写 Queue 的说明信息,最多128个字符。
常用参数
Auto Expire
Queue 的空闲存活时间,当 Queue 在指定时间内没有消费者连接、没有消息被消费或发布,会被自动删除。
Max Length
Queue 可以容纳的消息数量上限,超过设定值后将触发 Overflow behaviour 溢出策略。
Max Length Bytes
Queue 的存储容量上限,超过设定值后将触发 Overflow behaviour 溢出策略。
Delivery Limit
若队列内消息投递失败,允许的重试次数。当消息的投递次数达到设定值时,消息会被自动投递到死信队列(如果配置了死信 Exchange),否则会被丢弃。
Overflow Behaviour
当 Queue 容量达到上限时,队列的消息处理策略:
drop-head:当队列达到容量上限时,丢弃队列头部的消息。
reject-publish:当队列达到容量上限时,拒绝新消息的发布,并将发布操作标记为失败。
死信策略
无法正常消费的消息投递到死信队列的策略。
at-most-once:至多投递一次,消息可能丢失,但不会重复,适用于允许丢消息的非关键业务。
at-least-once:至少投递一次,消息不会丢失,但可能重复,适用于不允许丢消息的关键业务。只有 overflow behaviour 选择了 reject-publish 时,死信策略才可以选择 at-least-once。
死信 Exchange
消息达到最大重试次数仍投递失败,将被投递到死信 Exchange,默认指定名为 AMQP default exchange 的默认 Exchange。
其他高级选项
Single Active Consumer
是否开启单一活跃消费者,默认关闭。
若设置为 true,Queue 同一时间只允许一个消费者消费消息,其他消费者会处于待命状态,当活跃消费者断开后,会自动选择下一个消费者。适用于顺序敏感型任务,如订单状态变更等场景。
Max In Memory Length
Quorum 队列在内存中缓存的最大消息数量,超出后消息会被写入磁盘。
Max In Memory Bytes
Quorum 队列在内存中缓存消息的总大小(字节),超出后消息会被写入磁盘。
Initial cluster size
定义 Quorum 队列在集群中参与 Raft 共识的初始节点数量。
Leader locator
指定 Quorum 队列的 Leader 节点选择策略:
client-local:优先选择客户端连接的节点作为当前队列的 Leader 节点,可以减少网络延迟)
balanced:均衡分布 Leader,避免某些节点负载过高