news 2026/4/23 14:26:15

后端-RabbitMQ

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
后端-RabbitMQ

RabbitMQ

初识MQ

MQ(MessageQueue),中文是消息队列,字面来看就是存放消息的队列。也就是异步调用中的Broker

协议

AMQP

AMQP(Advanced Message Queuing Protocol,高级消息队列协议)是一个应用层的开放式标准协议,用于在分布式系统中实现消息的可靠传递。它定义了消息的结构、交换方式、路由规则等规范,使不通过厂商的消息中间件能够互联互通
在AMQP协议中,消息收发涉及到如下一些概念:

  • Borker:接收和分发消息的应用
  • Virtual host:出于多租户和安全因素设计的,把AMQP的基本组件划分到一个虚拟的分组中,类似于网络中的namespace概念。当多个不同的用户使用同一个RabbitMQ 提供的服务时,可以划分出多个 vhost,每个用户在自己的 vhost 中创建exchange/queue
  • Connection:publisher/consumer 和 broker 之间的 TCP 连接,断开连接的操作只会在 client 端进行,Broker 不会断开连接,除非出现网络故障或 broker 服务出现问题
  • Channel:如果每一次访问 RabbitMQ 都建立一个 Connection,在消息量大的时候建立 TCP Connection 的开销将是巨大的,效率也较低。Channel 是在 Connection 内部建立的逻辑连接,如果应用程序支持多线程,通常每个 Thread 创建单独的 Channel 进行通讯,AMQP method 包含了 Channel id 帮助客户端和 Message Broker 识别 Channel,所以 Channel 之间是完全隔离的。Channel 作为轻量级的 Connection 极大减少了操作系统建立 TCP Connection 的开销
  • Exchange:Message 到达 Broker 的第一站,根据分发规则,匹配查询表中的 routing key,分发消息到 queue 中去。常用的类型有:direct (点对点), topic(发布订阅) 以及 fanout (广播)
  • Queue:消息最终被送到这里等待 Consumer 取走,一个 Message 可以被同时拷贝到多个 queue 中
  • Binding:Exchange 和 Queue 之间的虚拟连接,binding 中可以包含 routing key,Binding 信息被保存到 Exchange 中的查询表中,作为 Message 的分发依据
XMPP

XMPP(可扩展消息处理现场协议,Extensible Messaging and Presence Protocol)是一个基于 XML 的协议,多用于即时消息(IM)以及在线现场探测,适用于服务器之间的准即时操作。核心是基于 XML 流传输,这个协议可能最终允许因特网用户向因特网上的其他任何人发送即时消息,即使其操作系统和浏览器不同。 它的优点是通用公开、兼容性强、可扩展、安全性高,缺点是 XML 编码格式占用带宽大)

MQTT

MQTT(Message Queuing Telemetry Transport,消息队列遥测传输)是 IBM 开发的一个即时通讯协议,目前看来算是物联网开发中比较重要的协议之一了,该协议支持所有平台,几乎可以把所有联网物品和外部连接起来,被用来当做传感器和 Actuator(比如通过 Twitter 让房屋联网)的通信协议,它的优点是格式简洁、占用带宽小、支持移动端通信、支持 PUSH、适用于嵌入式系统

比较

RabbitMQActiveMQRocketMQKafka
社区RabbitApache阿里Apache
开发语言ErlangJavaJavaScala&Java
协议支持AMQP,XMPP,SMTP,STOMPOpenWire,STOMP,REST,XMPP,AMQP自定义协议自定义协议
可用性一般
单机吞吐量一般非常高
消息延迟微秒级毫秒级毫秒级毫秒以内
消息可靠性一般一般

安装

  1. 创建data文件夹
mkdir-p /opt/rabbitmq/data
  1. 拉取镜像
dockerpull rabbitmq
  1. 查看镜像
dockerimages
  1. 启动rabbitmq
dockerrun -d -v /opt/rabbitmq/data:/var/lib/rabbitmq -p5672:5672 -p15672:15672 --name rabbitmq -eRABBITMQ_DEFAULT_USER=admin -eRABBITMQ_DEFAULT_PASS=admin rabbitmq
  1. 启动rabbitmq_management
dockerexec-it rabbitmq rabbitmq-pluginsenablerabbitmq_management
  1. 访问rabbitmq管理页面
  • 浏览器访问http://192.168.159.128:15672
  • 初始账号密码admin admin
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/23 16:13:46

深度解析:恒玄科技 Android 系统工程师/架构师岗位 - 技术挑战、能力要求与面试指南

恒玄科技(上海)股份有限公司 Android系统工程师/架构师 职位信息 岗位职能: 1. 负责Android在SoC平台的移植和适配 2. 负责Android的定制化开发和优化 岗位要求: 1. 计算机,电子工程等相关专业本科/硕士以上学历 2. 3年以上嵌入式系统和软件开发经验 3. 熟练使用C++/JAVA进…

作者头像 李华
网站建设 2026/4/23 13:10:54

深入 Android 驱动开发:内核、外设、系统调优与职业实践

深圳市广和通无线股份有限公司 深圳市广和通无线股份有限公司 职位信息 工作职责: 1、根据项目需求,进行需求分析、软件设计、开发、调试、测试等; 2、负责Android系统内核相关的外设驱动开发、调试、维护以及操作系统的bringup、稳定性调试与性能优化等工作; 4、与测试、硬…

作者头像 李华
网站建设 2026/4/23 13:27:49

实验室预约管理系统(开源 FastAPI + Vue )

源码下载: 「28-实验室预约系统」 链接:https://pan.quark.cn/s/46e6d24d4ff6 实验室预约管理系统 一个基于 FastAPI SQLite HTML/JS 的实验室预约管理系统,支持学生预约、教师审核、管理员管理的完整流程。 项目简介 本系统旨在解决学校实…

作者头像 李华
网站建设 2026/4/23 16:47:53

企业级人事管理系统管理系统源码|SpringBoot+Vue+MyBatis架构+MySQL数据库【完整版】

摘要 随着企业规模的扩大和信息化建设的深入,传统的人事管理模式已无法满足现代企业对高效、精准、智能化管理的需求。企业人事管理涉及员工信息、考勤、薪资、绩效等多维度数据,传统手工操作或单机版管理系统存在数据孤岛、效率低下、易出错等问题。因…

作者头像 李华
网站建设 2026/4/23 13:44:07

【毕业设计】SpringBoot+Vue+MySQL 小区团购管理平台源码+数据库+论文+部署文档

摘要 随着互联网技术的快速发展和社区经济的兴起,小区团购模式逐渐成为居民日常生活中不可或缺的一部分。传统的团购方式存在信息不透明、管理效率低下、沟通成本高等问题,难以满足现代社区居民对便捷、高效购物体验的需求。基于此,开发一款小…

作者头像 李华
网站建设 2026/4/23 12:26:13

主题生成AI PPT工具横评:ChatPPT何以成为公认第一?

主题生成AI PPT工具横评:ChatPPT何以成为公认第一? 输入一句话,3分钟内一份专业精美的PPT即刻生成。AI正在重新定义演示文稿的制作方式。 在快节奏的职场与学术环境中,PPT制作已成为一项基本且耗时的工作。传统PPT制作流程涉及内容…

作者头像 李华