RabbitMQ---搭建(自定义数据以及日志目录)

提示:本文档参考的是另外一个博主后自己后面自定义的数据目录以及日志目录

文章目录


前言

一、RabbitMQ 简介

RabbitMQ 是一个开源的消息队列(Message Broker),用 Erlang 语言编写,实现了 AMQP(Advanced Message Queuing Protocol,高级消息队列协议)。它可以让不同的应用、服务或者系统之间通过消息进行异步通信。

RabbitMQ 主要用于解耦应用、缓冲高并发流量、保证消息可靠传递。它在企业级系统、微服务架构和分布式系统中非常常用。

1. 核心概念

  • Producer(生产者):发送消息的应用程序。
  • Queue(队列):消息的缓冲区,接收生产者发送的消息。
  • Exchange(交换器):接收生产者消息并根据规则分发到一个或多个队列。
  • Direct Exchange:根据消息的 routing key 精准匹配队列。
  • Fanout Exchange:广播消息到所有绑定队列。
  • Topic Exchange:按模式匹配 routing key,将消息分发到匹配队列。
  • Consumer(消费者):接收队列中消息的应用程序。
  • Binding(绑定):队列与交换器之间的关联关系。

2. 工作流程(简单示意)

Producer → Exchange → Queue → Consumer

  • 生产者将消息发送给 Exchange
  • Exchange 根据绑定规则决定将消息投递到哪些队列
  • 消费者从队列中获取消息并处理

二、RabbitMQ 的优点

1、可靠性高

  • 支持持久化队列、消息确认(ack)机制
  • 支持事务和确认,保证消息不丢失

2、灵活的路由机制

  • 多种 Exchange 类型(direct/fanout/topic/headers)可实现复杂路由

3、跨语言支持

  • 提供官方客户端 SDK(Java、Python、C#、Go、PHP 等)

4、插件丰富

  • 支持管理插件、监控插件、Shovel、Federation 等

5、可扩展性和集群支持

  • 支持镜像队列、集群部署
  • 可通过分布式 Erlang 节点扩展吞吐

6、 监控和管理方便

  • 提供 Web 管理界面,可查看队列状态、消息堆积、连接信息

三、RabbitMQ 的缺点 / 局限

1、吞吐量限制

  • 相比 Kafka,RabbitMQ 吞吐量较低,更适合 可靠性高、消息量中等 的场景
  • 高并发、大批量消息可能成为瓶颈

2、消息存储机制

  • 持久化消息会写磁盘,影响性能
  • 对大规模消息队列需要调优

3、集群复杂性

  • RabbitMQ 集群需要注意节点之间的一致性
  • 高可用镜像队列在网络延迟下可能影响性能

4、延迟和顺序问题

  • 消息在队列中可能被重新排队,严格顺序不能保证

5、管理运维

  • 虽有 Web 界面,但大规模集群仍需仔细监控、调整配置

四、适用场景

1、异步任务处理

  • 后台任务队列、定时任务分发

2、系统解耦

  • 微服务之间异步通信

3、流量削峰

  • 高并发请求下,先把消息放入队列,慢慢处理

4、可靠消息传递

  • 需要确认消息已被处理,不丢失

提示:以下是本篇文章正文内容,下面案例可供参考

五、配置yum源

示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。

bash 复制代码
1、到指定的目录
[root@VM-16-92-centos ~]#  cd /etc/yum.repos.d
2、查看是否有rabbitmqrepo配置
[root@VM-16-92-centos yum.repos.d]# ll -a 
3、添加rabbitmqrepo配置
[root@VM-16-92-centos yum.repos.d]# vi /etc/yum.repos.d/rabbitmq.repo
##添加一下内容
# In /etc/yum.repos.d/rabbitmq.repo

##
## Zero dependency Erlang
##

[rabbitmq_erlang]
name=rabbitmq_erlang
baseurl=https://packagecloud.io/rabbitmq/erlang/el/8/$basearch
repo_gpgcheck=1
gpgcheck=1
enabled=1
# PackageCloud's repository key and RabbitMQ package signing key
gpgkey=https://packagecloud.io/rabbitmq/erlang/gpgkey
       https://github.com/rabbitmq/signing-keys/releases/download/2.0/rabbitmq-release-signing-key.asc
sslverify=1
sslcacert=/etc/pki/tls/certs/ca-bundle.crt
metadata_expire=300

[rabbitmq_erlang-source]
name=rabbitmq_erlang-source
baseurl=https://packagecloud.io/rabbitmq/erlang/el/8/SRPMS
repo_gpgcheck=1
gpgcheck=0
enabled=1
# PackageCloud's repository key and RabbitMQ package signing key
gpgkey=https://packagecloud.io/rabbitmq/erlang/gpgkey
       https://github.com/rabbitmq/signing-keys/releases/download/2.0/rabbitmq-release-signing-key.asc
sslverify=1
sslcacert=/etc/pki/tls/certs/ca-bundle.crt
metadata_expire=300

##
## RabbitMQ server
##

[rabbitmq_server]
name=rabbitmq_server
baseurl=https://packagecloud.io/rabbitmq/rabbitmq-server/el/8/$basearch
repo_gpgcheck=1
gpgcheck=0
enabled=1
# PackageCloud's repository key and RabbitMQ package signing key
gpgkey=https://packagecloud.io/rabbitmq/rabbitmq-server/gpgkey
       https://github.com/rabbitmq/signing-keys/releases/download/2.0/rabbitmq-release-signing-key.asc
sslverify=1
sslcacert=/etc/pki/tls/certs/ca-bundle.crt
metadata_expire=300

[rabbitmq_server-source]
name=rabbitmq_server-source
baseurl=https://packagecloud.io/rabbitmq/rabbitmq-server/el/8/SRPMS
repo_gpgcheck=1
gpgcheck=0
enabled=1
gpgkey=https://packagecloud.io/rabbitmq/rabbitmq-server/gpgkey
sslverify=1
sslcacert=/etc/pki/tls/certs/ca-bundle.crt
metadata_expire=300

六、使用yum安装

bash 复制代码
[root@VM-16-92-centos ~]# yum update -y
[root@VM-16-92-centos ~]# yum -q makecache -y --disablerepo='*' --enablerepo='rabbitmq_erlang' --enablerepo='rabbitmq_server'
[root@VM-16-92-centos ~]# yum install socat logrotate -y
[root@VM-16-92-centos ~]# yum install --repo rabbitmq_erlang --repo rabbitmq_server erlang rabbitmq-server -y

七、rabbitmq启动创建用户以及常用命令

bash 复制代码
7.1、启动 rabbitmq:
[root@VM-16-92-centos ~]# /sbin/service rabbitmq-server start

7.2、查看 rabbtimq的状态:
[root@VM-16-92-centos ~]# /sbin/service rabbitmq-server status

7.3、停止服务rabbtimq的状态
[root@VM-16-92-centos ~]# /sbin/service rabbitmq-server stop

7.4、开启 web 管理插件
[root@VM-16-92-centos ~]# rabbitmq-plugins enable rabbitmq_management

7.5、创建账号
[root@VM-16-92-centos ~]# rabbitmqctl add_user admin 123

7.6、设置用户角色
[root@VM-16-92-centos ~]# rabbitmqctl set_user_tags admin administrator

7.7、设置用户权限
[root@VM-16-92-centos ~]# rabbitmqctl set_permissions -p "/" admin ".*" ".*" ".*"

7.8、当前用户和角色
[root@VM-16-92-centos ~]# rabbitmqctl list_users
至此安装成功可以测试访问rocketmq

八、下面开始指定数据以及日志目录

bash 复制代码
注意:本人有一个挂载的数据盘路径是/data
8.1、先关闭rabbitmq
[root@VM-16-92-centos data]# /sbin/service rabbitmq-server stop
8.2、创建日数据目录
[root@VM-16-92-centos data]# mkdir -p /data/rabbitmq/mnesia
8.3、 创建日志目录
[root@VM-16-92-centos data]# mkdir -p /data/rabbitmq/log
8.4、修改目录权限
[root@VM-16-92-centos data]# chown -R rabbitmq:rabbitmq /data/rabbitmq
8.5、添加配置文件
[root@VM-16-92-centos data]# vim /etc/rabbitmq/rabbitmq-env.conf
添加如下:
MNESIA_BASE=/data/rabbitmq/mnesia
LOG_BASE=/data/rabbitmq/log
8.6、创建端口配置文件
[root@VM-16-92-centos data]# cd /etc/rabbitmq/
[root@VM-16-92-centos rabbitmq]# vi rabbitmq.conf 
添加如下:
# AMQP 消息端口
listeners.tcp.default = 5672
# 管理 Web 端口
management.listener.port = 15672
management.listener.ip = 0.0.0.0
8.7、再次修改目录权限
[root@VM-16-92-centos data]# sudo chown -R rabbitmq:rabbitmq /data/rabbitmq
[root@VM-16-92-centos data]# sudo chmod 750 /data/rabbitmq
8.8、启动rabbitmq
[root@VM-16-92-centos data]# /sbin/service rabbitmq-server start
8.9、如果 RabbitMQ 正常工作,并且你确定不再使用旧目录可以删除旧目录:
[root@VM-16-92-centos data]# sudo rm -rf /var/lib/rabbitmq/mnesia
8.10、## 因为删除了之前的数据目录所以上面创建账号必须再次执行一下
创建账号,密码可根据自己设定
[root@VM-16-92-centos data]# rabbitmqctl add_user admin 123
设置用户角色
[root@VM-16-92-centos data]# rabbitmqctl set_user_tags admin administrator
设置用户权限
[root@VM-16-92-centos data]# rabbitmqctl set_permissions -p "/" admin ".*" ".*" ".*"
当前用户和角色
[root@VM-16-92-centos data]# rabbitmqctl list_users
8.11、查看端口
[root@VM-16-92-centos rabbitmq]# ss -tlnp | grep 5672
LISTEN 0      128          0.0.0.0:25672      0.0.0.0:*    users:(("beam.smp",pid=47858,fd=25))
LISTEN 0      1024         0.0.0.0:15672      0.0.0.0:*    users:(("beam.smp",pid=47858,fd=41))
LISTEN 0      128                *:5672             *:*    users:(("beam.smp",pid=47858,fd=42))
[root@VM-16-92-centos rabbitmq]# ss -tlnp | grep 15672
LISTEN 0      1024         0.0.0.0:15672      0.0.0.0:*    users:(("beam.smp",pid=47858,fd=41))

九、访问测试

http://49.234.204.187:15672

账号密码:admin 123

十、知识扩展

10.1、目录详解

bash 复制代码
[root@VM-16-92-centos rabbitmq]# pwd
/data/rabbitmq
[root@VM-16-92-centos rabbitmq]# ll
total 8
drwxr-xr-x 2 rabbitmq rabbitmq 4096 Nov 12 10:54 log  ## 日志目录
drwxr-xr-x 4 rabbitmq rabbitmq 4096 Nov 12 10:54 mnesia ## 数据目录
[root@VM-16-92-centos rabbitmq]# cd mnesia/
[root@VM-16-92-centos mnesia]# ll
total 16
drwxr-x--- 5 rabbitmq rabbitmq 4096 Nov 12 10:57 rabbit@VM-16-92-centos
-rw-r----- 1 rabbitmq rabbitmq  588 Nov 12 10:54 rabbit@VM-16-92-centos-feature_flags
-rw-r----- 1 rabbitmq rabbitmq    5 Nov 12 10:54 rabbit@VM-16-92-centos.pid
drwxr-x--- 2 rabbitmq rabbitmq 4096 Nov 12 10:54 rabbit@VM-16-92-centos-plugins-expand

详解目录1:rabbit@VM-16-92-centos
这是 RabbitMQ 核心数据库目录,存放节点的队列、交换机、绑定信息、消息元数据等。
Mnesia 是 Erlang 内置的分布式数据库,RabbitMQ 的消息和元数据都存放在这里。
里面会有很多 .DCD、.DCL、.TMB 等文件,这是 Mnesia 的内部文件,不要手动删除或修改。

详解目录2:rabbit@VM-16-92-centos-feature_flags
用来存储 RabbitMQ 节点的功能标记(Feature Flags),比如开启或关闭某些实验性功能。
文件内容通常很小,不需要人工干预。

详解目录3:rabbit@VM-16-92-centos.pid
是 RabbitMQ 节点的 进程 ID 文件。
当 RabbitMQ 启动时,它会在这里写入当前进程的 PID,用于 systemd 或 rabbitmqctl 识别节点。
停止服务后,文件会被删除或更新

详解目录4:rabbit@VM-16-92-centos-plugins-expand/
这是 RabbitMQ 插件扩展目录。
插件(比如 rabbitmq_management)在这里会展开自己的配置或文件。
当你启用新插件或更新插件时,相关文件会存放在这里。

10.2、rabbitmq.conf 和rabbitmq-env.conf配置文件解释

1️⃣ 两个文件的作用不同

为什么rabbitmq.conf 和rabbitmq-env.conf配置文件不能放在一个主配置文件里面

文件 类型 功能 示例
rabbitmq.conf RabbitMQ 配置文件(.conf) RabbitMQ 自身参数配置,支持 监听端口、插件、策略、集群参数等 listeners.tcp.default=5672、management.listener.port=15672
rabbitmq-env.conf 环境变量文件 设置 RabbitMQ 启动环境和系统路径,主要用于控制节点的数据目录、日志目录、ERL 环境变量等 MNESIA_BASE=/data/rabbitmq/mnesia、LOG_BASE=/data/rabbitmq/log

核心区别:

.conf 是 RabbitMQ 内部参数

env.conf 是 操作系统环境变量,在启动 RabbitMQ 服务前就会被读取

2️⃣ 为什么不能把端口也放在 rabbitmq-env.conf

rabbitmq-env.conf 只是用来设置 环境变量,RabbitMQ 启动脚本会先加载这个文件设置环境。

端口配置属于 RabbitMQ 应用参数,只有在 rabbitmq.conf 里写,插件和服务才能读取并生效。

如果写在 rabbitmq-env.conf:

RabbitMQ 启动时会忽略这些配置

listeners.tcp.default、management.listener.port 不会生效

3️⃣ 类比理解

rabbitmq-env.conf ≈ Java 的 JAVA_HOME、PATH 环境变量

rabbitmq.conf ≈ Java 的 application.properties 或 application.yml 配置应用逻辑参数

两个文件职责不同,所以被拆开管理。


总结

端口、插件等 RabbitMQ 参数 → rabbitmq.conf

数据目录、日志目录、ERL 环境 → rabbitmq-env.conf

不能混放,否则 RabbitMQ 启动时会忽略不属于环境变量的配置

相关推荐
keep__go3 小时前
spark 单机安装
大数据·运维·分布式·spark
蒙特卡洛的随机游走11 小时前
Spark的persist和cache
大数据·分布式·spark
蒙特卡洛的随机游走11 小时前
Spark 中 distribute by、sort by、cluster by 深度解析
大数据·分布式·spark
梦里不知身是客1111 小时前
Spark中的宽窄依赖-宽窄巷子
大数据·分布式·spark
过往记忆11 小时前
Kafka 作为事件流的商业模式正在消亡
分布式·kafka
KYumii11 小时前
智慧判官-分布式编程评测平台
vue.js·spring boot·分布式·spring cloud·java-rabbitmq
半旧夜夏11 小时前
【MQ】集群部署和可靠性攻略
rabbitmq
百***992411 小时前
RabbitMQ高级特性----生产者确认机制
分布式·rabbitmq
技术小李...14 小时前
centos7.2安装cacti1.2.27
centos·cacti