2天时间,聊今年最热的 Agent、上下文工程、AI 产品创新等话题。2025 年最后一场~ 了解详情
写点什么

中小型研发团队架构实践:如何用好消息队列 RabbitMQ?

  • 2017-11-30
  • 本文字数:2255 字

    阅读完需:约 7 分钟

一、写在前面

使用过分布式中间件的人都知道,程序员使用起来并不复杂,常用的客户端 API 就那么几个,比我们日常编写程序时用到的 API 要少得多。但是分布式中间件在中小研发团队中使用得并不多,为什么会这样呢?

原因是中间件的职责相对单一,客户端的使用虽然简单,但整个环境搭起来却不容易。所以对于系列中的几篇中间件文章,我们重点放在解决门槛问题,把服务端环境搭好(后期可云或运维解决),把中间件的基本职责和功能介绍好,把客户端 Demo 写好,让程序员抬抬脚,在调试代码中即可轻松入门。

根据我们以往几年的经验,初次接触也可以自主快速学习,文章和 Demo 以实用为主,以下是消息队列 RabbitMQ 的快速入门及应用。

二、为什么要用消息队列 MQ

1、业务系统往往要求响应能力特别强,能够起到削峰填谷的作用。

2、解耦:如果一个系统挂了,则不会影响另外个系统的继续运行。

3、业务系统往往有对消息的高可靠要求,以及有对复杂功能如 Ack 的要求。

4、增强业务系统的异步处理能力,减少甚至几乎不可能出现并发现象:

使用消息队列,就好比为了防汛而建葛洲坝,有大量数据的堆积能力,然后可靠地进行异步输出。例如:

传统做法存在如下问题,请见上图:

  1. 一旦业务处理时间超过了定时器时间间隔,就会导致漏单。
  2. 如果采用新开线程的方式获取数据,那么由于大量新开线程处理,会容易造成服务器宕机。
  3. 数据库压力大,易并发。

使用 MQ 后的好处,请见上图

  1. 业务可注册、可配置。
  2. 获取数据规则可配置。
  3. 成功消费 MQ 中的消息才会被 Ack,提高可靠性。
  4. 大大增强了异步处理业务作业的能力:

定时从数据库获取数据后,存入 MQ 消息队列,然后 Job 会定期扫描 MQ 消息队列,假设 Job 扫描后先预取 5 条消息,然后异步处理这 5 条消息,也就是说这 5 条消息可能会同时被处理。

三、RabbitMQ 简介

RabbitMQ 是基于 AMQP 实现的一个开源消息组件,主要用于在分布式系统中存储转发消息,由因高性能、高可用以及高扩展而出名的 Erlang 语言写成。

其中,AMQP(Advanced Message Queuing Protocol,即高级消息队列协议),是一个异步消息传递所使用的应用层协议规范,为面向消息的中间件设计。

RabbitMQ 特点如下:

高可靠:RabbitMQ 提供了多种多样的特性让你在可靠性和性能之间做出权衡,包括持久化、发送应答、发布确认以及高可用性。

高可用队列:支持跨机器集群,支持队列安全镜像备份,消息的生产者与消费者不论哪一方出现问题,均不会影响消息的正常发出与接收。

灵活的路由:所有的消息都会通过路由器转发到各个消息队列中,RabbitMQ 内建了几个常用的路由器,并且可以通过路由器的组合以及自定义路由器插件来完成复杂的路由功能。

支持多客户端:对主流开发语言(如:Python、Ruby、.NET、Java、C、PHP、ActionScript 等)都有客户端实现。

集群:本地网络内的多个 Server 可以聚合在一起,共同组成一个逻辑上的 broker。

扩展性:支持负载均衡,动态增减服务器简单方便。

权限管理:灵活的用户角色权限管理,Virtual Host 是权限控制的最小粒度。

插件系统:支持各种丰富的插件扩展,同时也支持自定义插件,其中最常用的插件是 Web 管理工具 RabbitMQ_Management,其 Web UI 访问地址:

http://139.198.13.12:6233/

登录账号:flight,密码:yyabc123。

四、RabbitMQ 工作原理

消息从发送端到接收端的流转过程即 RabbitMQ 的消息工作机制,请见下图:

消息发送与接收的工作机制

五、RabbitMQ 基本用法

共有 6 种基本用法:单对单、单对多、发布订阅模式、按路由规则发送接收、主题、RPC(即远程存储调用)。我们将介绍单对单、单对多和主题的用法。

1、单对单:单发送、单接收。请见下图。

2、单对多:一个发送端,多个接收端,如分布式的任务派发。请见下图:

3、主题:Exchange Type 为 topic,发送消息时需要指定交换机及 Routing Key,消费者的消息队列绑定到该交换机并匹配到 Routing Key 实现消息的订阅,订阅后则可接收消息。只有消费者将队列绑定到该交换机且指定的 Routing Key 符合匹配规则,才能收到消息。

其中 Routing Key 可以设置成通配符,如:* 或 #(* 表示匹配 Routing Key 中的某个单词,# 表示任意的 Routing Key 的消息都能被收到)。如果 Routing Key 由多个单词组成,则单词之间用. 来分隔。

命名规范:

交换机名的命名建议:Ex{AppID}.{自定义 ExchangeName},队列名的命名建议:MQ{AppID}.{自定义 QueueName} 。

六、Demo 下载及更多资料

RabbitMQDemo 下载地址 https://github.com/das2017/RabbitMQDemo

RabbitMQ 的官方网址 http://www.rabbitmq.com

本系列文章涉及内容清单如下(并不按这顺序发布),其中有感兴趣的,欢迎关注:

作者介绍

张辉清,10 多年的 IT 老兵,先后担任携程架构师、古大集团首席架构、中青易游 CTO 等职务,主导过两家公司的技术架构升级改造工作。现关注架构与工程效率,技术与业务的匹配与融合,技术价值与创新。

杨丽,拥有多年互联网应用系统研发经验,曾就职于古大集团,现任职中青易游系统架构师,主要负责公司研发中心业务系统的架构设计以及新技术积累和培训。现阶段主要关注开源软件、软件架构、微服务以及大数据。

感谢雨多田光对本文的审校。

2017-11-30 16:4930734

评论

发布
暂无评论
发现更多内容

大数据-106 Spark Graph X案例:1图计算、2连通图算法、3寻找相同用户 高效分区、负载均衡与迭代优化

武子康

Java 大数据 flink spark 分布式

Controller方法层POST请求方式代码形参接收不到问题

刘大猫

人工智能 云计算 算法 物联网 大模型

阿里云 PAI 携手 NVIDIA 提供端到端物理 AI 解决方案

阿里云大数据AI技术

在AI技术唾手可得的时代,挖掘新需求成为核心竞争力——某知名窗口管理工具需求洞察

qife122

需求分析 产品优化

Apache Doris 3.1 正式发布:半结构化分析全面升级,湖仓一体能力再跃新高

SelectDB

数据库 数据分析 实时数仓 湖仓一体 半结构化

大数据 AI 平台:构筑 Agentic AI 的核心基石

阿里云大数据AI技术

阿里云 云栖大会 Agentic AI 大数据 AI 平台

结构支持 编译到中间代码

Miracle

关于追觅造车,你需要知道的

慢点科技SlowTech

可灵团队提出MIDAS:压缩比64倍、延迟低于500ms,多模态互动数字人框架实现交互生成新突破!

快手技术

告别重复劳动!用AI一键为全员生成考勤表格丨excel提效

阿星AI工作室

产品 AI 工具 AIGC 办公提效

鸿蒙应用开发从入门到实战(十四):ArkUI组件Column&Row&线性布局

程序员潘Sir

鸿蒙 HarmonyOS

【大连理工大学主办】第四届能源与动力工程国际学术会议(EPE 2025)

搞科研的小刘

国际学术会议 能源与动力工程

【IEEE出版 |已连续5届EI稳定检索】第六届计算机工程与智能控制学术会议(ICCEIC 2025)

搞科研的小刘

学术会议 计算机工程与智能控制

黑龙江等保测评价格探秘:关键要素与行情洞察

等保测评

哈尔滨等保测评:周期与费用

等保测评

spirv 运行在显卡上

Miracle

哪个白板软件支持离线编辑?这个本土国产工具值得一试!

职场工具箱

效率工具 数据安全 在线白板 办公软件 离线编辑

使用时长提升 4 倍,融云 AI Agent 助力中东语聊应用激活新用户

融云 RongCloud

斥巨资引入的AI,为何在业务一线“水土不服”?

MatrixOrigin

人工智能 数据挖掘 AI 数据分析 数据

基于数据平台构建供应链协同体系,实现业务全链路可视化与智能决策

袋鼠云数栈

数据治理 企业数字化 袋鼠云 数栈 数字治理

科技领航,Robo.ai在中东展现AI赋能DePIN的"中国方案",价值创造者终获认可

科技大数据

StarRocks 助力印度领先即时零售平台 Zepto 构建实时洞察能力

StarRocks

Parquet StarRocks zepto Databricks Postgres MVP

喜报|矩阵起源荣获2025深圳市“种子独角兽企业”称号

MatrixOrigin

人工智能 AI 种子独角兽

融云荣登信通院「2025 上半年度高质量数字化转型全景图&技术解决方案集」

融云 RongCloud

结构支持

Miracle

Easysearch 国产替代 Elasticsearch:8 大核心问题解读

极限实验室

搜索引擎 elasticsearch 国产替代 easysearch ES国产化

原生 App 与 H5 开发的对比

北京木奇科技有限公司

APP开发 软件外包公司 APP外包

黑龙江等保测评:赋能多行业安全发展的实践探索

等保测评

spirv 常量的管理

Miracle

AWS Aurora MySQL 可观测性最佳实践

观测云

中小型研发团队架构实践:如何用好消息队列RabbitMQ?_语言 & 开发_张辉清_InfoQ精选文章