本文共 1647 字,大约阅读时间需要 5 分钟。
在 RabbitMQ 中,普通队列存在一个关键问题:当一个节点宕机后,其他节点无法读写宕机节点的队列数据。为了解决此问题,RabbitMQ 引入了仲裁队列。
Raft 协议是一种共识算法,用于解决分布式系统中的单点故障问题。它通过三个子问题确保系统一致性:Leader 选举、日志复制和安全性。
Raft 节点有三种角色:
任期(Term):从一次选举开始到 Leader 宕机为止为一个任期。节点会存储当前任期号,并在每次成功选举后单调递增。
选举流程:
为了避免集群同时发起选举,Raft 使用随机选举超时时间(150-300ms)。这样可以确保大多数情况下不会出现所有节点同时成为 Candidate。
MQ 管理平台提供了对仲裁队列的监控和管理功能。
spring: application: name: rabbitmq rabbitmq: host: env-base port: 5672 username: root password: 1111
import com.cyk.rabbitmq.constants.MQConst;import org.springframework.amqp.core.Queue;import org.springframework.amqp.core.QueueBuilder;@Configurationclass QuorumConfig { @Bean fun quorumQueue(): Queue = QueueBuilder .durable(MQConst.QUORUM_QUEUE) .quorum() .build();} @RestController@RequestMapping("/mq")class MQApi( private val rabbitTemplate: RabbitTemplate) { @GetMapping fun quorum(): String { rabbitTemplate.convertAndSend("", MQConst.QUORUM_QUEUE, "quorum msg 1") return "ok" }} 转载地址:http://citfk.baihongyu.com/