4. 环境搭建

本章是《事件总线配置:MQ实现ERP生产工单与WMS物料预留的同步》课程的基础设施章节。我们将完成RabbitMQ消息中间件的安装、核心配置、管理控制台导航,以及多租户隔离所需的虚拟主机与用户权限体系搭建。正确的环境准备是后续工单与物料预留事件可靠传输的前提。

4.1 RabbitMQ安装方式对比

RabbitMQ支持多种安装途径,适用于开发、测试与生产环境。下表对比了三种主流安装方式的适用场景与关键差异:

安装方式 适用环境 版本管理 配置复杂度 推荐指数
Erlang/OTP + 源码编译 定制化生产环境 手动控制 高 ★★★
操作系统包管理器(apt/yum) 标准Linux服务器 随发行版更新 低 ★★★★
Docker容器 开发/测试/CI/CD 镜像标签控制 极低 ★★★★★
课程推荐:本课程所有演示均基于Docker方式部署,确保环境一致性。生产环境建议使用包管理器或容器编排平台(Kubernetes)部署。

4.2 基于Docker的快速安装

执行以下命令即可在本地拉起RabbitMQ 3.12.x实例,并启用管理插件:

# 拉取官方镜像(包含管理插件)
docker pull rabbitmq:3.12-management

# 启动容器,映射端口:
# 5672 - AMQP协议端口(客户端连接)
# 15672 - HTTP管理界面端口
docker run -d \
  --name erp-wms-rabbitmq \
  -p 5672:5672 \
  -p 15672:15672 \
  -e RABBITMQ_DEFAULT_USER=admin \
  -e RABBITMQ_DEFAULT_PASS=Admin123! \
  rabbitmq:3.12-management

启动后,使用 docker ps 确认容器状态为 Up。若需持久化数据,可挂载本地卷:

docker run -d \
  --name erp-wms-rabbitmq \
  -p 5672:5672 \
  -p 15672:15672 \
  -v /data/rabbitmq:/var/lib/rabbitmq \
  -e RABBITMQ_DEFAULT_USER=admin \
  -e RABBITMQ_DEFAULT_PASS=Admin123! \
  rabbitmq:3.12-management

4.3 管理界面功能导航

浏览器访问 http://localhost:15672,使用 admin / Admin123! 登录。管理界面是日常运维与监控的核心入口,主要功能区如下:

  • Overview(概览):集群状态、节点列表、连接数、队列深度、消息速率等全局指标。
  • Connections(连接):查看所有客户端TCP连接,支持强制关闭异常连接。
  • Channels(通道):每个连接下的AMQP通道列表,显示通道级流量。
  • Exchanges(交换器):管理所有交换器,支持新增、绑定、删除操作。
  • Queues(队列):队列列表与详情,可查看消息数、消费者数、执行Purge清空。
  • Admin(管理):用户管理、虚拟主机管理、权限策略、集群配置。
注意:生产环境中务必在首次登录后修改默认管理员密码,并禁用guest用户的远程访问(默认guest只能从localhost连接)。

4.4 虚拟主机(Virtual Host)与隔离策略

虚拟主机是RabbitMQ实现多租户隔离的基本单元。每个虚拟主机拥有独立的交换器、队列、绑定关系,租户间完全隔离。在ERP与WMS同步场景中,我们为不同环境创建独立虚拟主机:

虚拟主机名称 用途 关联系统
/erp-wms-dev 开发环境联调 ERP开发实例、WMS开发实例
/erp-wms-test 集成测试验证 ERP测试实例、WMS测试实例
/erp-wms-prod 生产环境运行 ERP生产实例、WMS生产实例

通过管理界面或命令行创建虚拟主机:

# 命令行创建虚拟主机
docker exec -it erp-wms-rabbitmq rabbitmqctl add_vhost /erp-wms-dev
docker exec -it erp-wms-rabbitmq rabbitmqctl add_vhost /erp-wms-test
docker exec -it erp-wms-rabbitmq rabbitmqctl add_vhost /erp-wms-prod

# 查看所有虚拟主机
docker exec -it erp-wms-rabbitmq rabbitmqctl list_vhosts
架构原则:虚拟主机隔离是事件总线安全性的第一道防线。生产环境与开发环境必须使用不同虚拟主机,避免测试消息污染生产队列。

4.5 用户创建与权限模型

RabbitMQ的权限模型基于“用户 → 虚拟主机 → 资源”三级控制。每个用户针对特定虚拟主机拥有配置(configure)、写(write)、读(read)权限。针对ERP与WMS的同步场景,我们创建专用服务账号:

用户名 密码 所属虚拟主机 权限范围 说明
erp_service Erp@2024MQ /erp-wms-prod 配置、写、读 ERP系统专用账号
wms_service Wms@2024MQ /erp-wms-prod 配置、写、读 WMS系统专用账号
monitor_user Mon@2024MQ /erp-wms-prod 读 监控与运维只读账号

使用命令行创建用户并授权:

# 创建用户
docker exec -it erp-wms-rabbitmq rabbitmqctl add_user erp_service Erp@2024MQ
docker exec -it erp-wms-rabbitmq rabbitmqctl add_user wms_service Wms@2024MQ
docker exec -it erp-wms-rabbitmq rabbitmqctl add_user monitor_user Mon@2024MQ

# 设置权限(正则表达式:允许所有资源)
docker exec -it erp-wms-rabbitmq rabbitmqctl set_permissions \
  -p /erp-wms-prod erp_service ".*" ".*" ".*"

docker exec -it erp-wms-rabbitmq rabbitmqctl set_permissions \
  -p /erp-wms-prod wms_service ".*" ".*" ".*"

# 监控账号仅授予读权限
docker exec -it erp-wms-rabbitmq rabbitmqctl set_permissions \
  -p /erp-wms-prod monitor_user "^$" "^$" ".*"

# 查看用户权限
docker exec -it erp-wms-rabbitmq rabbitmqctl list_user_permissions erp_service
权限最小化原则:生产环境中,建议将 configure 权限限制为特定资源正则,例如只允许操作 ^erp\. 或 ^wms\. 前缀的交换器与队列,防止误操作影响其他业务线。

4.6 环境验证:连接测试

完成安装与配置后,使用Python客户端验证连通性:

import pika

# 连接参数
credentials = pika.PlainCredentials('erp_service', 'Erp@2024MQ')
parameters = pika.ConnectionParameters(
    host='localhost',
    port=5672,
    virtual_host='/erp-wms-prod',
    credentials=credentials
)

# 建立连接
connection = pika.BlockingConnection(parameters)
channel = connection.channel()

# 声明测试队列
channel.queue_declare(queue='test_connection', durable=True)

# 发送测试消息
channel.basic_publish(
    exchange='',
    routing_key='test_connection',
    body='ERP-WMS 环境验证成功',
    properties=pika.BasicProperties(delivery_mode=2)
)

print("消息发送成功,环境验证通过!")
connection.close()

执行脚本后,登录管理界面,进入 /erp-wms-prod 虚拟主机,查看 test_connection 队列,确认消息已入队。

4.7 本章小结

至此,RabbitMQ环境已就绪:

  • Docker容器运行RabbitMQ 3.12-management实例
  • 管理界面可访问,核心功能区已了解
  • 三个虚拟主机实现开发/测试/生产环境隔离
  • ERP、WMS专用服务账号与监控只读账号已创建并授权
  • Python客户端验证通过,消息可正常收发