MQ(Message Queue,消息队列)是分布式系统中的核心中间件,本质是「异步通信的消息中转站」—— 生产者(发送消息的应用)将消息写入队列,消费者(接收消息的应用)从队列中读取消息,实现解耦、异步、削峰三大核心价值。
对于 CentOS 环境学习者,MQ 是必学的中间件技能(尤其后端开发 / 运维方向),以下从「基础概念→主流产品→CentOS 实操→应用场景」展开,帮你系统化入门:
- 不是所有场景都需要 MQ:简单同步通信(如查询用户信息)用直接调用更高效,MQ 会增加系统复杂度。
- 不要过度依赖 MQ:需考虑消息丢失、重复消费、延迟等问题,需配合持久化、幂等性设计。
新手优先从「RabbitMQ」入门(文档全、易部署、生态成熟),后续可根据场景学习 Kafka/RocketMQ,以下是主流产品核心差异:
- 理由:CentOS 下部署简单,基础功能完善,适合新手理解 MQ 核心概念(队列、交换机、绑定、消费者确认等)。
- CentOS 版本:CentOS Stream 8/9(兼容更好)。
- 依赖:Erlang(RabbitMQ 基于 Erlang 开发,必须先安装)。
RabbitMQ 与 Erlang 版本有兼容要求(参考
官方兼容表),这里以「RabbitMQ 3.13 + Erlang 26」为例:
curl -fsSL https://packagecloud.io/rabbitmq/erlang/gpgkey | gpg --dearmor -o /etc/pki/rpm-gpg/RPM-GPG-KEY-erlang
echo -e "[erlang]\nname=rabbitmq-erlang\nbaseurl=https://packagecloud.io/rabbitmq/erlang/el/8/\nenabled=1\ngpgcheck=1\ngpgkey=/etc/pki/rpm-gpg/RPM-GPG-KEY-erlang" > /etc/yum.repos.d/erlang.repo
dnf install -y erlang
erl -version
curl -fsSL https://packagecloud.io/rabbitmq/rabbitmq-server/gpgkey | gpg --dearmor -o /etc/pki/rpm-gpg/RPM-GPG-KEY-rabbitmq
echo -e "[rabbitmq-server]\nname=rabbitmq-server\nbaseurl=https://packagecloud.io/rabbitmq/rabbitmq-server/el/8/\nenabled=1\ngpgcheck=1\ngpgkey=/etc/pki/rpm-gpg/RPM-GPG-KEY-rabbitmq" > /etc/yum.repos.d/rabbitmq.repo
dnf install -y rabbitmq-server
systemctl start rabbitmq-server
systemctl enable rabbitmq-server
systemctl status rabbitmq-server
rabbitmq-plugins enable rabbitmq_management
firewall-cmd --permanent --add-port=15672/tcp
firewall-cmd --permanent --add-port=5672/tcp
firewall-cmd --reload
rabbitmqctl add_user admin 123456
rabbitmqctl set_user_tags admin administrator
rabbitmqctl set_permissions -p / admin ".*" ".*" ".*"
rabbitmqctl list_users
- 浏览器输入:
http://CentOS服务器IP:15672
- 登录账号:admin,密码:123456
- 界面说明:
- 「Queues」:队列管理(创建、删除、查看消息)。
- 「Exchanges」:交换机管理(路由消息的核心)。
- 「Connections」:查看连接的生产者 / 消费者。
- 「Channels」:消息通信通道(每个连接可创建多个通道)。
- 创建队列:进入「Queues」→ 填写队列名(如
test_queue)→ 点击「Add queue」。
- 发送消息:选中
test_queue→ 点击「Publish message」→ 输入消息内容(如Hello RabbitMQ)→ 点击「Publish」。
- 接收消息:选中
test_queue→ 点击「Get messages」→ 即可看到接收的消息。
rabbitmqctl consume test_queue --username admin --password 123456
rabbitmqctl publish test_queue "" "Hello from CentOS" --username admin --password 123456
通过 RabbitMQ 实操,结合以下概念理解,才能真正掌握 MQ 的工作原理:
- 生产者(Producer):发送消息的应用(如电商下单服务)。
- 消费者(Consumer):接收并处理消息的应用(如库存服务)。
- 队列(Queue):存储消息的容器,按「先进先出(FIFO)」原则处理消息(RabbitMQ 的队列是绑定到交换机的)。
- 交换机(Exchange):消息的「路由器」,生产者发送的消息先到交换机,再由交换机根据路由规则转发到对应的队列。
- 常见交换机类型:
- Direct(直接路由):消息中的「Routing Key」与队列绑定的「Binding Key」完全匹配才转发(最常用)。
- Fanout(广播):将消息转发到所有绑定的队列(如日志广播)。
- Topic(主题路由):支持通配符匹配(如
user.*匹配user.register、user.login)。
- 绑定(Binding):交换机与队列的关联关系,包含「Binding Key」(路由规则)。
- ACK(确认机制):消费者处理完消息后,向 MQ 发送确认信号,MQ 才会删除消息(避免消息丢失)。
- 持久化(Persistence):队列和消息标记为持久化后,MQ 重启后数据不丢失(生产环境必开)。
- RabbitMQ 深入:
- 高级特性:事务消息、死信队列(处理无法消费的消息)、延迟队列(定时任务)、集群部署(高可用)。
- 性能优化:调整通道数、队列持久化策略、消息批量发送 / 消费。
- 其他 MQ 产品:
- Kafka:学习集群部署、主题分区、消费者组、日志存储(适合大数据场景)。
- RocketMQ:学习事务消息、顺序消息、定时消息(适合电商 / 金融场景)。
- 实战场景落地:
- 结合 CentOS+Spring Boot(Java)/Django(Python),实现「下单→MQ→库存扣减」完整流程。
- 学习 MQ 监控:RabbitMQ 的 Prometheus 插件、Grafana 可视化监控。
- 官方文档:
- 视频教程:
- 尚硅谷《RabbitMQ 教程》(零基础友好,结合实战)。
- 黑马程序员《分布式中间件 MQ 全套教程》(覆盖 RabbitMQ/Kafka)。
- 书籍:
- 《RabbitMQ 实战指南》(入门到进阶,案例丰富)。
- 《Kafka 权威指南》(深入理解 Kafka 核心原理)。
- 「实操优先」:MQ 是工具类中间件,光看概念没用,必须动手部署、创建队列、发送 / 接收消息,甚至模拟异常场景(如 MQ 重启、消息重复)。
- 「场景驱动」:结合真实业务场景学习(如下单、日志收集),理解「为什么用 MQ」比「怎么用 MQ」更重要。
- 「由浅入深」:先掌握 RabbitMQ 基础使用,再学高级特性,最后拓展到 Kafka/RocketMQ,避免一开始就陷入复杂概念。
按照这个路径,1-2 周就能掌握 MQ 基础使用,后续结合分布式系统实战,就能真正发挥 MQ 的价值~