1.RabbitMQ入门-概念、安装、配置
前言
RabbitMQ:高并发、高可用。
几年前学习过RabbitMQ,但是笔记没有做好,而且随着工作的深入,很多不理解的东西需要重新规划。
基础篇:概念、应用场景、基本安装。
核心篇:基本消息、工作队列、发布订阅、路由、主题。
进阶篇:普通集群、镜像队列、负载均衡、监控心跳。
1.消息队列概念和场景
1.1概念
消息队列全称MessageQueue,简称MQ。本质是一个队列,FIFO先进先出,只不过队列中存放的内容是message,从而称为消息队列(消息+队列)。
主要用途:不同服务server、进程process、线程thread之间通信。
Broker
Broker的概念来自与Apache ActiveMQ,通俗的讲就是MQ的服务器。
生产者和消费者
消息生产者Producer:发送消息到消息队列。
消息消费者Consumer:从消息队列接收消息。
点对点(线程池)
消息生产者向一个特定的队列发送消息,消息消费者从该队列中接收消息。
一条消息只有一个消费者能收到。
发布订阅
实际操作过程中,发布订阅消息模型中,支持向一个特定的主题Topic发布消息,0个或多个订阅者接收来自这个消息主题的消息。在这种模型下,发布者和订阅者彼此不知道对方。
必须先订阅,再发送消息,而后接收订阅的消息,这个顺序必须保证。
消息的顺序性保证
基于Queue消息模型,利用FIFO先进先出的特性,可以保证消息的顺序性。
消息的ACK确认机制
即消息的Ackownledge确认机制,为了保证消息不丢失,消息队列提供了消息Acknowledge机制,即ACK机制,当Consumer确认消息已经被消费处理,发送一个ACK给消息队列,此时消息队列便可以删除这个消息了。
如果Consumer宕机/关闭,没有发送ACK,消息队列将认为这个消息没有被处理,会将这个消息重新发送给其他的Consumer重新消费处理。
通过牺牲吞吐量获得实时性。
消息的持久化
消息的持久化,对于一些关键的核心业务来说是非常重要的,启用消息持久化后,消息队列宕机重启后,消息可以从持久化存储恢复,消息不丢失,可以继续消费处理。
对于生产者,将数据发送到消息队列,消息队列会保存多个副本,即使MQ服务器奔溃,重启仍能找到生产者的消息数据。
对于消费者,拉取到消息后,将返回一个信息给MQ告诉它已经获得了消息,MQ将保存相关数据,即使MQ服务器奔溃,重启仍能知道消费者已经获取了哪些数据,避免重复发送。
消息队列的异步处理
同步:消息的收发支持同步收发的方式。
异步:消息的收发同样支持异步方式:异步发送消息,不需要等待消息队列的接收确认;异步接收消息,以Push的方式触发消息消费者接收消息。
消息队列的事务支持
消息的收发处理支持事务,例如:在任务中心场景中,一次处理可能涉及多个消息的接收、处理,这处于同一个事务范围内,如果一个消息处理失败,事务回滚,消息重新回到队列中。
1.2场景
- 削峰填谷
- 应用解耦
- 异步处理
- 发布订阅
- 消息驱动
需要根据业务场景选择合适的消息队列。
2.RabbitMQ原理
Broker :即RabbitMQ的实体服务器。提供一种传输服务,维护一条从生产者到消费者的传输线路,保证消息数据能按照指定的方式传输。
Exchange :消息交换机。指定消息按照什么规则路由到哪个队列Queue。
Queue :消息队列。消息的载体,每条消息都会被投送到一个或多个队列中。
Binding :绑定。作用就是将Exchange和Queue按照某种路由规则绑定起来。
Routing Key:路由关键字。Exchange根据Routing Key进行消息投递。定义绑定时指定的关键字称为Binding Key。
Vhost:虚拟主机。一个Broker可以有多个虚拟主机,用作不同用户的权限分离。一个虚拟主机持有一组Exchange、Queue和Binding。
Producer:消息生产者。主要将消息投递到对应的Exchange上面。一般是独立的程序。
Consumer:消息消费者。消息的接收者,一般是独立的程序。
Connection:Producer 和Consumer 与Broker之间的TCP长连接。
Channel:消息通道,也称信道。在客户端的每个连接里可以建立多个Channel,每个Channel代表一个会话任务。在RabbitMQ Java Client API中,channel上定义了大量的编程接口。
3.Docker Desktop安装RabbitMQ
3.1安装Docker Desktop
安装Docker Desktop
地址:https://www.docker.com/products/docker-desktop/
等待安装完成
3.2Unexpected WSL errpr
运行Docker Desktop报错是因为电脑环境问题,请检查电脑是否开启支持虚拟化。
打开任务管理器确认
启用或关闭Windows功能查看并安装。

安装后重启,打开Docker Desktop正常。
3.3安装RabbitMQ
# 查看docker版本
docker -v
# 运行rabbitmq
docker run -it -d --name rabbitmq -p 5672:5672 -p 15672:15672 rabbitmq:3.13-management
docker run :创建一个新的容器并运行一个命令
- -a stdin: 指定标准输入输出内容类型,可选 STDIN/STDOUT/STDERR 三项;
- -d: 后台运行容器,并返回容器ID;
- -i: 以交互模式运行容器,通常与 -t 同时使用;
- -t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;
- -P: 随机端口映射,容器内部端口随机映射到主机的端口
- -p: 指定端口映射,格式为:主机(宿主)端口:容器端口
- --name="nginx-lb": 为容器指定一个名称;
- --volume , -v: 绑定一个卷
4.RabbitMQ管理界面
默认账号:guest gutest
描述、链接、信道、交换机、消息队列、管理员
添加一个用户
配置一个虚拟机
配置完毕
创作不易,感谢支持。

【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!