RabbitMQ消息队列:高可用集群搭建与消息幂等处理

RabbitMQ高可用集群需完成环境准备、集群组建、镜像队列配置,并结合负载均衡与幂等处理,确保消息可靠与系统稳定。

一、环境准备与基础配置

1. 服务器规划与依赖安装
  • 服务器信息(3节点示例):

    主机名 IP地址 部署服务
    rabbit-node1 192.168.0.12 RabbitMQ、HAProxy、KeepAlived
    rabbit-node2 192.168.0.14 RabbitMQ、HAProxy、KeepAlived
    rabbit-node3 192.168.0.15 RabbitMQ
  • 安装步骤

    复制代码
    bash

    # 安装Erlang(版本需与RabbitMQ匹配,如Erlang 26.2.3 + RabbitMQ 3.13.0) sudo rpm -ivh erlang-26.2.3-1.el7.x86_64.rpm # 安装RabbitMQ sudo rpm -ivh rabbitmq-server-3.13.0-1.el8.noarch.rpm # 启动并设置开机自启 sudo systemctl start rabbitmq-server && sudo systemctl enable rabbitmq-server

2. 主机解析与Cookie同步
  • 配置hosts(所有节点):

    复制代码
    bash

    sudo vim /etc/hosts # 添加 192.168.0.12 rabbit-node1 192.168.0.14 rabbit-node2 192.168.0.15 rabbit-node3

  • 同步Erlang Cookie(集群认证密钥):

    复制代码
    bash

    # 在rabbit-node1执行,拷贝Cookie到其他节点 sudo scp /var/lib/rabbitmq/.erlang.cookie root@rabbit-node2:/var/lib/rabbitmq/ sudo scp /var/lib/rabbitmq/.erlang.cookie root@rabbit-node3:/var/lib/rabbitmq/ # 设置权限(所有节点) sudo chmod 600 /var/lib/rabbitmq/.erlang.cookie

---

二、集群搭建与高可用配置

1. 组建普通集群
  • 加入集群(在rabbit-node2和rabbit-node3执行):

    复制代码
    bash

    # 停止应用→重置节点→加入集群→启动应用 rabbitmqctl stop_app rabbitmqctl reset rabbitmqctl join_cluster rabbit@rabbit-node1 # 以rabbit-node1为基准节点 rabbitmqctl start_app

  • 验证集群状态

    复制代码
    bash

    rabbitmqctl cluster_status # 应显示3个节点,状态为running

2. 配置镜像队列(核心高可用步骤)
  • 设置镜像策略(所有队列同步至所有节点):

    复制代码
    bash

    rabbitmqctl set_policy ha-all "^" '{"ha-mode":"all", "ha-sync-mode":"automatic"}' # 参数说明: # ha-all:策略名称 # "^":匹配所有队列(正则表达式) # ha-mode: all:镜像到集群所有节点 # ha-sync-mode: automatic:自动同步队列数据

---

三、负载均衡与故障转移

1. HAProxy负载均衡
  • 安装与配置 (在rabbit-node1和rabbit-node2部署):

    复制代码
    bash

    sudo yum install haproxy -y sudo vim /etc/haproxy/haproxy.cfg
    配置示例

    复制代码
    ini

    listen rabbitmq_cluster bind 0.0.0.0:5672 # 对外服务端口 mode tcp balance roundrobin # 轮询负载均衡 server rabbit-node1 192.168.0.12:5672 check inter 5s rise 2 fall 3 server rabbit-node2 192.168.0.14:5672 check inter 5s rise 2 fall 3 server rabbit-node3 192.168.0.15:5672 check inter 5s rise 2 fall 3

2. KeepAlived故障转移
  • 配置虚拟IP(VIP),确保HAProxy高可用,客户端通过VIP访问集群。

---

四、消息幂等处理

1. 唯一ID + 去重表
  • 创建去重表

    复制代码
    sql

    CREATE TABLE message_idempotency ( id VARCHAR(36) PRIMARY KEY, # 消息唯一ID(UUID) create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP );

  • Java代码实现

    复制代码
    java

    public class IdempotencyService { // 检查消息是否已处理 public boolean isProcessed(String msgId) { // 查询数据库,存在则返回true } // 标记消息为已处理 public void markProcessed(String msgId) { // 插入数据库 } }

相关推荐
C、空白格2 分钟前
Java集成Vosk实现离线语音识别
java·开发语言·语音识别
金融大 k6 分钟前
Spring Boot WebSocket 实时行情推送实战:从断线重连到并发优化
spring boot·后端·websocket
编码浪子11 分钟前
基于 Rust + Axum 的企业级权限管理系统设计与实现
开发语言·后端·rust
历程里程碑13 分钟前
MySQL事务深度解析:ACID到MVCC实战+万字长文解析
开发语言·数据结构·数据库·c++·sql·mysql·排序算法
掘金者阿豪17 分钟前
从零到一:Spring Boot快速接入金仓数据库实战
后端
Lyyaoo.21 分钟前
【JAVA基础面经】native方法
java·开发语言
牛十二23 分钟前
nacos2.4连接出错源码分析
java·linux·开发语言
Go_error29 分钟前
Go channel 数据聚合
后端·go
小松加哲31 分钟前
AspectJ编译期织入实战
java·开发语言
鲸渔32 分钟前
【C++ 跳转语句】break、continue、goto 与 return
开发语言·c++·算法