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

相关推荐
古城小栈1 小时前
Rust 1.94.0 闪亮登台
开发语言·后端·rust
弹简特2 小时前
【JavaEE15-后端部分】SpringBoot配置文件的介绍
java·spring boot·后端
SEO-狼术2 小时前
Convert HTML Tables to PDF in Python
开发语言·python·pdf
码云数智-大飞2 小时前
三足鼎立下的抉择:深度解析 Vue、React 与 Angular 的核心差异与选型指南
开发语言
TheLegendMe2 小时前
Python 基础语法练习题
开发语言·python
格林威2 小时前
工业相机图像高速存储(C#版):内存映射文件方法,附海康相机C#实战代码!
开发语言·人工智能·数码相机·opencv·计算机视觉·c#·工业相机
csbysj20202 小时前
Lua 数据库访问
开发语言
弹简特2 小时前
【JavaEE16-后端部分】SpringBoot日志的介绍
java·spring boot·后端
熊猫_豆豆2 小时前
无人机表演点云路径规划(Python版)
开发语言·python·无人机·路径规划