news 2026/10/23 20:32:23

RabbitMQ学习笔记

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
RabbitMQ学习笔记

1.消息中间件

MQ全称为Message Queue,消息队列是应用程序和应用程序之间的通信方法。

在项目中,可将一些无需即时返回且耗时的操作提取出来,进行异步处理,而这种异步处理的方式大大的节省了服务器的请求响应时间,从而提高了系统的吞吐量。

常见的消息中间件

1.ActiveMQ

基于 JMS(Java Message Service)规范,Apache 开源项目。

优点:

  • 标准兼容性好:完整支持 JMS 1.1/2.0 规范,适合 Java 企业级应用。

  • 功能全面:支持点对点(Queue)、发布订阅(Topic)、事务、持久化、集群等。

  • 协议丰富:除 OpenWire(默认)外,还支持 STOMP、AMQP、MQTT、WebSocket 等,便于多语言客户端接入。

  • 部署简单:单机模式配置轻量,适合中小型系统。

缺点:

  • 性能一般:在高并发、高吞吐场景下性能不如 Kafka 或 RocketMQ。

  • 主从切换慢:传统主从模式故障恢复较慢(虽有 LevelDB + ZooKeeper 的共享存储方案,但已不推荐)。

  • 社区活跃度下降:新版本(如 ActiveMQ Artemis)虽有改进,但整体生态被 RabbitMQ/Kafka 超越。

  • 扩展性有限:横向扩展能力较弱,不适合超大规模消息堆积。

📌适用场景:传统企业应用、低频异步解耦、需要 JMS 标准的 Java 系统。


2.RabbitMQ

基于 AMQP 0.9.1 协议,使用 Erlang 开发,强调可靠性与稳定性。

优点:

  • 高可靠性:支持消息持久化、ACK 机制、死信队列、消息重试等,确保不丢消息。

  • 灵活路由:通过 Exchange + Binding + Routing Key 实现复杂路由策略(direct/topic/fanout/header)。

  • 管理界面友好:内置 Web UI,监控、运维、排错非常方便。

  • 社区成熟:文档丰富,插件生态完善(如延迟插件、Shovel、Federation)。

  • 多语言支持好:官方提供多种客户端 SDK。

缺点:

  • 吞吐量中等:单机吞吐通常在万级 QPS,远低于 Kafka/RocketMQ。

  • Erlang 门槛高:二次开发或深度定制困难,排查问题需了解 Erlang。

  • 内存占用高:大量未消费消息会占用较多内存(可调优)。

  • 集群扩展性一般:镜像队列(Mirroring)虽保证高可用,但写性能受主节点限制,无法水平扩展队列。

📌适用场景:对消息可靠性要求高、业务逻辑复杂的系统(如金融、订单、支付)。


3.RocketMQ

阿里巴巴开源,后捐赠 Apache,为高吞吐、高可用、顺序消息而生。

优点:

  • 高性能 & 高吞吐:单机可达 10w+ QPS,延迟低(毫秒级)。

  • 强顺序消息:支持严格 FIFO(分区有序),适用于交易流水、日志等场景。

  • 消息堆积能力强:基于磁盘文件存储,支持 TB 级消息堆积而不影响性能。

  • 丰富的特性:延迟消息(18个等级)、事务消息、消息轨迹、ACL 权限控制。

  • 天然分布式架构:NameServer(无状态) + Broker(主从) + Producer/Consumer,易于水平扩展。

缺点:

  • 生态相对封闭:主要围绕 Java 生态,其他语言客户端支持较弱(虽有 Go/Python 社区版,但不如 Kafka 成熟)。

  • 运维复杂度较高:需维护 NameServer 和 Broker 集群,配置项较多。

  • 协议非标准:自定义协议,不兼容 JMS/AMQP,迁移成本高。

  • 社区国际化较弱:文档以中文为主,英文资料较少。

📌适用场景:电商、金融、日志收集等对吞吐、顺序、堆积有高要求的场景。


4.Kafka

LinkedIn 开源,分布式流处理平台,强调高吞吐、可扩展、持久化日志。

优点:

  • 超高吞吐量:单机可达数十万甚至百万级 QPS,适合大数据场景。

  • 极强扩展性:分区(Partition)机制天然支持水平扩展,消费者组可并行消费。

  • 持久化与回溯:消息持久化到磁盘,支持按 offset 任意回放(适用于数据管道、ETL)。

  • 生态系统强大:与 Flink、Spark、Hadoop、Kafka Streams 等无缝集成。

  • 跨语言支持好:社区提供丰富的客户端(Java/Go/Python/Node.js 等)。

缺点:

  • 实时性稍差:为吞吐优化,默认批量发送/拉取,端到端延迟通常在 10ms~100ms(不适合强实时场景)。

  • 不支持复杂路由:只有 Topic + Partition,无 RabbitMQ 那样的灵活 Exchange。

  • 消息可靠性需调优:默认配置可能丢消息(需设置acks=all,replication.factor≥3等)。

  • 运维复杂:依赖 ZooKeeper(Kafka 2.8+ 支持 KRaft 模式去 ZooKeeper,但尚未完全普及)。

📌适用场景:日志聚合、行为追踪、流式处理、大数据管道、事件溯源等。

Kafka:适合大数据处理、流计算场景,以及对吞吐量和持久化有极高要求,并且愿意投入资源进行运维的项目。ActiveMQ:适用于小型项目或对消息队列功能需求较简单的场景,由于社区活跃度不高,不推荐使用。RabbitMQ:在需要灵活路由、广泛语言支持及良好社区生态的项目中表现出色,适用于大多数通用应用场景。RocketMQ:尤其适合金融、电商等对性能和事务处理要求严苛,愿意投入精力学习和维护的大型分布式系统。

2.RabbitMQ

简介

RabbitMQ是由erlang语言开发,基于AMQP(Advanced Message Queue 高级消息队列协议)协议实现的消息队列,它是一种应用程序之间的通信方法,消息队列在分布式系统开发中应用非常广泛。

RabbitMQ官方地址:http://www.rabbitmq.com/

RabbitMQ提供了6种模式:简单模式,work模式,Publish/Subscribe发布与订阅模式,Routing路由模式,Topics主题模式,RPC远程调用模式(远程调用,不太算MQ;暂不作介绍);

官网对应模式介绍:https://www.rabbitmq.com/getstarted.html

安装成功后,在sbin目录下cmd执行rabbitmq-plugins enable rabbitmq_management启动管理功能

默认账号密码 guest

1.导入依赖

<!--amqp-client--> <!-- Source: https://mvnrepository.com/artifact/com.rabbitmq/amqp-client --> <dependency>  <groupId>com.rabbitmq</groupId>  <artifactId>amqp-client</artifactId>  <version>5.21.0</version>  <scope>compile</scope> </dependency>

2.编写连接工具类

public class ConnectionUtil {    public static Connection getConnection() throws IOException, TimeoutException {       // 1.创建连接工厂       ConnectionFactory connectionFactory = new ConnectionFactory();       // 2.配置连接信息       connectionFactory.setHost("localhost");    // ip       connectionFactory.setPort(5672);            // 端口       connectionFactory.setVirtualHost("/");        // 虚拟机       connectionFactory.setUsername("admin");    // 用户名       connectionFactory.setPassword("admin");    // 密码       // 3.创建连接       return connectionFactory.newConnection();   } }

1.简单模式

简单模式(Simple/Hello World):一个生产者发送消息到一个队列,一个消费者从该队列接收消息,是最基本的点对点通信模型。

编写生产者

public class Producer { ​ private static final String QUEUE_NAME = "simple_queue"; ​ public static void main(String[] args) throws IOException, TimeoutException { // 1.获取连接对象 Connection connection = ConnectionUtil.getConnection(); ​ // 2.创建频道 Channel channel = connection.createChannel(); /* * 声明(创建)队列 * 参数1:队列名称 * 参数2:是否定义持久化队列:true(是),false(否) 保存到硬盘 * 参数3:是否独占本次连接:true(是),false(否) 只能被当前连接使用,如果connection连接关闭,则队列自动删除 * 参数4:是否在不使用的时候自动删除队列 * 参数5:队列其它参数 以Map数据结构存储 */ channel.queueDeclare(QUEUE_NAME,true,false,false,null); ​ // 3.发送消息 String message = "Hello RabbitMQ3"; /* * 参数1:交换机名称,如果没有指定则使用默认Default Exchage * 参数2:路由key,简单模式可以传递队列名称 * 参数3:消息其它属性 * 参数4:消息内容 */ channel.basicPublish("",QUEUE_NAME,null,message.getBytes()); ​ // 4.关闭资源 channel.close(); connection.close(); } }

编写消费者

public class Consumer { ​ private static final String QUEUE_NAME = "simple_queue"; ​ public static void main(String[] args) throws IOException, TimeoutException { // 1.获取连接对象 Connection connection = ConnectionUtil.getConnection(); ​ // 2.创建频道 Channel channel = connection.createChannel(); /* * 声明(创建)队列 * 参数1:队列名称 * 参数2:是否定义持久化队列:true(是),false(否) 保存到硬盘 * 参数3:是否独占本次连接:true(是),false(否) 只能被当前连接使用,如果connection连接关闭,则队列自动删除 * 参数4:是否在不使用的时候自动删除队列 * 参数5:队列其它参数 以Map数据结构存储 */ channel.queueDeclare(QUEUE_NAME, true, false, false, null); ​ // 3.创建消费者
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/21 5:42:03

BUCK-BOOST升降压电路Multisim电路仿真分析

目录 0 概述 工作过程简述 Q1 导通阶段 Q1 关断阶段 稳态输出 主要元件作用 电路特点 1 过程分析: 第一次开关闭合时 第二次Q1闭合时C1放电 2 Multisim仿真分析 占空比D=25% 占空比D=60% 摘要 本文分析了三极管型BUCK-BOOST升降压开关电源的工作原理。该电路结…

作者头像 李华
网站建设 2026/10/22 7:19:35

内存固态等大幅涨价的优势是什么?

原本电子垃圾又有了些许价值升华。 排名上升 现在有部分旧电脑重新启用。看大数据的排名结果&#xff1a; https://blog.csdn.net/ZhangRelay/article/details/155345614 这是去年&#xff0c;2025年11月28日测试的结果&#xff0c;2%排位&#xff0c;非常低端了。 预料之中的…

作者头像 李华
网站建设 2026/10/21 7:20:32

YOLOv12官版镜像训练全流程,附完整代码示例

YOLOv12官版镜像训练全流程&#xff0c;附完整代码示例 YOLOv12不是迭代编号的简单延续&#xff0c;而是一次范式跃迁——它彻底告别了卷积主干&#xff0c;将注意力机制作为目标检测的原生语言。当行业还在为RT-DETR的推理延迟发愁时&#xff0c;YOLOv12已用1.6毫秒完成一次高…

作者头像 李华
网站建设 2026/10/21 8:32:45

SAM 3多模态提示实战:文本+点选协同提升小目标分割准确率

SAM 3多模态提示实战&#xff1a;文本点选协同提升小目标分割准确率 1. 模型概述 SAM 3是Meta推出的新一代多模态分割基础模型&#xff0c;能够同时处理图像和视频中的对象分割任务。与传统的单一模态分割模型不同&#xff0c;SAM 3创新性地支持文本提示和视觉提示的协同使用…

作者头像 李华
网站建设 2026/10/21 8:32:22

【毕业设计】SpringBoot+Vue+MySQL spring boot校园商铺管理系统平台源码+数据库+论文+部署文档

摘要 随着互联网技术的快速发展&#xff0c;校园商铺管理系统逐渐成为高校信息化建设的重要组成部分。传统校园商铺管理多依赖人工操作&#xff0c;效率低下且容易出错&#xff0c;无法满足现代校园商业活动的需求。通过数字化手段实现商铺信息的统一管理、订单的高效处理以及…

作者头像 李华
网站建设 2026/10/21 13:06:06

前后端分离工作流程管理系统系统|SpringBoot+Vue+MyBatis+MySQL完整源码+部署教程

摘要 随着互联网技术的快速发展&#xff0c;传统的前后端耦合式开发模式逐渐暴露出维护成本高、开发效率低、扩展性差等问题。前后端分离架构因其模块化、解耦性强、开发效率高等优势&#xff0c;成为现代Web开发的主流趋势。工作流程管理系统作为企业信息化建设的重要组成部分…

作者头像 李华