当前位置: 首页 > news >正文

基础篇:消息队列理论部分,另一种环境搭建Docker运行RabbitMQ

消息队列与RabbitMQ初探

本章学习目标

  • 理解什么是消息队列以及它解决了什么核心问题。

  • 了解RabbitMQ是什么及其在技术生态中的位置。

  • 另一种方式在本地使用Docker快速搭建一个RabbitMQ服务。

  • 熟悉RabbitMQ的管理控制台。


一、理论部分

1. 同步调用 vs. 异步消息

在传统的应用开发中,组件之间通常通过同步调用(如HTTP API、gRPC)进行通信。

  • 优点:简单、直接,能立即得到结果。

  • 缺点:

    • 耦合性强:服务A必须知道服务B的地址,并且服务B必须在线才能成功调用。

    • 性能瓶颈:如果服务B处理缓慢,服务A也必须跟着等待,整个链路的响应时间会变长。

    • 容错性差:服务B宕机会导致服务A的功能不可用。

异步消息模式引入了消息代理(Message Broker) 作为中间人。

  • 工作流程:服务A(生产者)将消息发送到消息队列(Message Queue)中,然后就可以立即返回,无需等待。服务B(消费者)在合适的时候从队列中取出消息并进行处理。

  • 优点:

    • 解耦:生产者和消费者彼此不知晓对方的存在,只与消息队列交互。

    • 削峰填谷:在面对突发流量时,消息队列可以作为一个缓冲区,避免后端服务被瞬间冲垮。

    • 异步处理:生产者无需等待消费者处理完成,提高了系统的响应速度。

    • 弹性扩展:可以很容易地启动多个消费者来并行处理队列中的消息。

2. 消息队列能解决什么问题?

  • 应用解耦:微服务之间不再直接调用,而是通过消息队列通信,系统架构变得更灵活。

  • 流量削峰:秒杀、抢购等场景下,将大量请求先存入队列,后端服务再根据自己的处理能力匀速消费。

  • 异步通信:将非核心业务异步化,如注册成功后发送邮件/短信通知,提高主流程的响应速度。

  • 最终一致性:在分布式系统中,通过消息队列实现事务的最终一致性。

3. 常见消息队列产品对比

特性RabbitMQApache KafkaAzure Service BusActiveMQ
协议 AMQP 自定义协议 AMQP, HTTP JMS, AMQP
设计理念 消息代理,通用 分布式流平台,高吞吐 企业级消息服务 JMS实现,通用
吞吐量 极高
延迟 低-中
主要优势 灵活的路由、可靠性、管理界面 高吞吐、持久化日志、流处理 云托管、与Azure生态集成 Java生态友好、支持多种协议
适用场景 业务解耦、异步任务、RPC 日志收集、流处理、事件溯源 Azure云上的企业应用 Java项目,需要支持多种议

为什么本系列选择RabbitMQ?
因为它成熟、稳定、功能丰富,提供了强大的消息路由功能和完善的管理界面,是学习消息队列和应对大多数业务场景的绝佳选择。

4. RabbitMQ简介

RabbitMQ是一个开源的消息代理和队列服务器,使用Erlang语言编写,实现了AMQP 0-9-1协议。它轻量级、易于部署,同时支持多种消息传递协议,并能在分布式系统中可靠地传输消息。

 

二、实操部分:搭建环境

我们将使用Docker来运行RabbitMQ,这是最简单、最干净的方式,无需在本地安装Erlang和RabbitMQ服务。

1. 使用Docker部署RabbitMQ

确保你的机器上已经安装了Docker Desktop。

打开你的终端(PowerShell, CMD, 或 Bash),执行以下命令:

docker run -d \--name my-rabbitmq \-p 5672:5672 \    # AMQP协议端口,应用程序使用这个端口连接-p 15672:15672 \  # HTTP管理界面端口-e RABBITMQ_DEFAULT_USER=myuser \  # 设置默认用户名-e RABBITMQ_DEFAULT_PASS=mypassword \ # 设置默认密码rabbitmq:3-management

命令解释:

  • -d: 在后台运行容器。

  • --name: 给容器起一个名字,方便后续管理。

  • -p: 端口映射,将容器内的端口映射到宿主机。

  • -e: 设置环境变量。这里我们设置了默认的用户名和密码,强烈建议替换掉默认的guest/guest,因为新版RabbitMQ默认禁止通过远程连接使用guest账户。

  • rabbitmq:3-management: 这是镜像名。-management 后缀表示这个镜像自带Web管理插件。如果使用不带此后缀的镜像,将没有管理界面。

2. 访问管理控制台

容器启动后,打开你的浏览器,访问:http://localhost:15672

使用刚才设置的用户名(myuser)和密码(mypassword)登录。

你会看到一个功能丰富的管理后台,这是我们日后观察和调试RabbitMQ的利器。主要功能区域包括:

  • Overview:总览,显示整个集群的信息、数据统计等。

  • Connections:当前所有活跃的连接。

  • Channels:通道(Channel),基于连接创建的轻量级链接,大部分操作都在通道上进行。

  • Exchanges:交换机,消息的入口,根据规则将消息路由到队列。

  • Queues:队列,存储消息的地方。

  • Admin:管理用户、权限等。

3. 验证连接

你可以使用一个简单的命令来检查RabbitMQ服务是否正常运行:

docker logs my-rabbitmq

如果看到类似 Server startup complete; ... 的日志,说明服务已成功启动。


总结

在这一章中,我们:

  1. 理解了为什么需要消息队列——解耦、削峰、异步。

  2. 认识了RabbitMQ及其在消息队列领域的地位。

  3. 使用Docker在本地搭建了一个带管理界面的RabbitMQ服务器。

  4. 登录了管理控制台,对其有了初步的印象。

http://www.wxhsa.cn/company.asp?id=2870

相关文章:

  • 项目案例作业1:学生信息管理系统(面向对象初步接触)
  • P1097 合唱队形
  • 一生一芯学习:pa2.1 RTFM
  • Linux网络:初识网络 - 详解
  • 20250909比赛总结
  • 又寸入生白勺司烤
  • Ubuntu 安装 GIPM
  • 手动下载vscode扩展的方法
  • GAS_Aura-Aura Projectile
  • CF1583F Defender of Childhood Dreams
  • scrollArea无法滚动
  • 时间序列分析(1)
  • 一行代码没写,做了一个小程序
  • 【置顶】欢迎来到 ziyaojia 的主页
  • copyparty 是一款使用单个 Python 材料实现的内网文件共享软件,具有跨平台、低资源占用等特点,适合需要本地化文件管理的场景
  • ZYNQ Ultrascale+系列部署yolo v10(暂定,若过于艰难则考虑降级或FQ)
  • 【EF Core】再谈普通实体关系与 Owned 关系的区别
  • qoj6104 Building Bombing
  • 必知必会:使用serializers.Serializer在views.py视图文件中序列化和反序列化过程的开发模板
  • Cursor小程序实战五:Cursor对接微信两大核心问题
  • 电商系统的Mysql表设计是怎么样呢
  • Docker应用 - CloudSaver
  • SQL查找是否存在,别再count了! - DAYTOY
  • Cursor小程序实战系列二:如何从原型界面到小程序界面
  • Cursor小程序实战系列三: 前后端对接保姆级拆解
  • 课前问题思考2
  • Cursor小程序实战四:如何让AI写好后端代码
  • Web 3
  • Cursor小程序实战系列一:0到1开发一个小程序,需求整理、小程序注册备案
  • 深入解析:MySQL 数据类型与运算符详解