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) { // 插入数据库 } }

相关推荐
铁皮饭盒21 分钟前
Bun执行python代码
前端·javascript·后端
菜鸟谢1 小时前
Rust 枚举 (enum) 完整核心知识点
后端
晓杰在写后端1 小时前
从0到1实现Balatro游戏后端(9):Blind奖励结算与金币系统实现
后端·游戏开发
Patrick_Wilson1 小时前
幂等到底是什么?从前端视角讲透 SQL、HTTP 与 POST 接口的幂等设计
前端·后端·架构
凌览1 小时前
一人公司别再上 Jenkins,真不值
前端·后端
菜鸟谢1 小时前
Rust 元组与数组内存管理笔记
后端
oil欧哟1 小时前
Codex 最佳实践(超级长文):先搞懂 AI,再用好 AI
前端·人工智能·后端
AskHarries1 小时前
把一个外部系统接成 MCP 工具
后端·程序员
释然小师弟2 小时前
Android开发十年:反思与回顾
android·后端·嵌入式
雪隐2 小时前
个人电脑玩AI-04让5060 Ti给你打工——本地FLUX.2 Klein 的 AI 图片生成
人工智能·后端