RabbitMQ架构模型(一)
RabbitMQ 整体上是一个生产者与消费者模型,主要负责接收、存储和转发消息。可以把消息传递的过程想象成:当你将一个包裹送到邮局,邮局会暂存并最终将邮件通过邮递员送到收件人的手上,RabbitMQ 就好比由邮局、邮箱和邮递员组成的一个系统。从计算机术语层面来说,RabbitMQ 模型更像是一种交换机模型。
一、生产者和消费者
Producer:生产者,就是投递消息的一方。
生产者创建消息,然后发布到 RabbitMQ 中。消息一般可以包含 2 个部分:消息体和标签(Label)。消息体也可以称之为 payload,在实际应用中,消息体一般是一个带有业务逻辑结构的数据,比如一个 JSON 字符串。当然可以进一步对这个消息体进行序列化操作。消息的标签用来表述这条消息,比如一个交换器的名称和一个路由键。生产者把消息交由 RabbitMQ,RabbitMQ 之后会根据标签把消息发送给感兴趣的消费者(Consumer)。
Consumer:消费者,就是接收消息的一方。
消费者连接到 RabbitMQ 服务器,并订阅到队列上。当消费者消费一条消息时,只是消费消息的消息体(payload)。在消息路由的过程中,消息的标签会丢弃,存入到队列中的消息只有消息体,消费者也只会消费到消息体,也就不知道消息的生产者是谁,当然消费者也不需要知道。
Broker:消息中间件的服务节点。
对于 RabbitMQ 来说,一个 RabbitMQ Broker 可以简单地看作一个 RabbitMQ 服务节点,或者 RabbitMQ 服务实例。大多数情况下也可以将一个 RabbitMQ Broker 看作一台 RabbitMQ服务器。
下图展示了生产者将消息存入 RabbitMQ Broker,以及消费者从 Broker 中消费数据的整个流程。
首先生产者将业务方数据进行可能的包装,之后封装成消息,发送(AMQP 协议里这个动作对应的命令为 Basic.Publish)到 Broker 中。消费者订阅并接收消息(AMQP 协议里这个动作对应的命令为Basic.Consume或者Basic.Get),经过可能的解包处理得到原始的数据,之后再进行业务处理逻辑。这个业务处理逻辑并不一定需要和接收消息的逻辑使用同一个线程。消费者进程可以使用一个线程去接收消息,存入到内存中,比如使用 Java 中的 BlockingQueue。业务处理逻辑使用另一个线程从内存中读取数据,这样可以将应用进一步解耦,提高整个应用的处理效率。
二、队列
Queue:队列,是 RabbitMQ 的内部对象,用于存储消息。
RabbitMQ 中消息都只能存储在队列中,这一点和 Kafka 这种消息中间件相反。Kafka 将消息存储在 topic(主题)这个逻辑层面,而相对应的队列逻辑只是 topic 实际存储文件中的位移标识。RabbitMQ 的生产者生产消息并最终投递到队列中,消费者可以从队列中获取消息并消费。
多个消费者可以订阅同一个队列,这时队列中的消息会被平均分摊(Round-Robin,即轮询)给多个消费者进行处理,而不是每个消费者都收到所有的消息并处理。
RabbitMQ 不支持队列层面的广播消费,如果需要广播消费,需要在其上进行二次开发,处理逻辑会变得异常复杂,同时也不建议这么做。
有帮助到你的点赞、收藏和关注一下吧
需要更多教程,微信扫码即可
RabbitMQ架构模型(一)相关推荐
- 【RabbitMQ】RabbitMQ架构模型
目录 RabbitMQ架构模型 Producer:生产者 Consumer:消费方 Broker:服务节点 Queue队列: Exchange:交换器 --fanout广播 --topic主题 --d ...
- RabbitMQ架构模型(二)
三.交换器.路由键.绑定 Exchange:交换器. 我们暂时可以理解成生产者将消息投递到队列中,实际上这个在 RabbitMQ 中不会发生.真实情况是,生产者将消息发送到 Exchange(交换 ...
- RabbitMQ的架构模型
本章主要讨论RabbitMQ的架构模型,AMQP协议是什么,以及RabbitMQ和AMQP之间的关系,还会讨论消息从生产者发出和送达到消费者这一过程要经历哪些步骤. RabbitMQ整体上是生产者与消 ...
- kafka 串讲:架构模型、角色功能梳理
kafka 串讲:架构模型.角色功能梳理 kafka 的 what why how,先有一个粗略宏观的理解 rabbitmq.各种 mq 的技术选型.横向对比 首先,kafka 是一个消息中间件.我们 ...
- RabbitMQ 架构原理
1.RabbitMQ 架构原理 由于 RabbitMQ 实现了 AMQP 协议,所以 RabbitMQ 的工作模型也是基于 AMQP 的.理解这张图片至关重要. 1.1 Broker 中介 我们要使用 ...
- RabbitMq工作模型
消息中间件RabbitMq工作模型 什么是MQ?为什么要用MQ? 为什么不用TCP.HTTP.RPC.WebService,为什么要用mq? 使用消息队列带来的问题 什么是AMQP协议? Rabbit ...
- 浅谈Chatbot的架构模型和响应机制
不知您是否已注意到:人工智能已经不再是少数科技公司的初级原型产品了.在许多服务类行业中,带有人工智能的聊天机器人(Chatbot)正在逐步取代人工客服,提供及时.周到.互动的服务.通过机器学习的相关技 ...
- ETSI MEC — 参考架构模型
目录 文章目录 目录 ETSI MEC 参考架构模型 架构设计原则 分层架构 系统架构 CFS portal UE app User app LCM proxy OSS MEAO MEPM MEP V ...
- 4G EPS 的架构模型
目录 文章目录 目录 前文列表 EPS 的架构 EPS 的架构模型 E-UTRAN UE eNodeB EPC MME(移动性管理) SGW(本地移动性锚点) PGW(业务锚点) HSS(用户认证及鉴 ...
最新文章
- 架构语言ArchiMate -业务层(Business Layer)
- ARC115E-LEQ and NEQ【容斥,dp,线段树】
- java流与文件——流
- vue命令行错误处理
- java test circle_TestCircle.java
- 求圈地的方块数java,java实现第三届蓝桥杯方块填数
- 论 BUG调试与(程序猿)初学者
- Disabling Shortcut Keys in Full Screen mode
- virtualenv 指定 python 解释器的版本
- Java设计模式之模板(template)方法模式
- 数据库原理及应用-期末考试试题及答案
- Windows隐藏工具栏并使程序窗口全屏显示
- 【Pycharm】安装及激活、界面调整、导入anaconda的依赖库、字体设置微软雅黑
- python cmd环境输入python打开应用商店解决
- 大数据项目(二)————某电信公司通话记录改造
- Maven第3篇:详解maven解决依赖问题
- 计算机网络安装系统怎么办,电脑不能连网要怎么解决?一定要重装系统?千万别再犯傻了!...
- Android音频——音量调节
- V2V-PoseNet
- python电子表格_Python操作 Excel表格
热门文章
- 爱奇艺龚宇:今日头条购买院线电影全网免费播放的模式不可持续
- 800名员工被隔离,韩国半导体巨头紧急回应:工厂运营不受影响
- “减压”成今年前十个月关键词:80后压力最大
- “球鞋一面墙,堪比一套房” 央视评炒鞋乱象:呼吁“鞋穿不炒”
- realme曝光全球首张6400万像素样张 大家品一品?
- 狂奔的瑞幸咖啡讲了一个好故事 但还缺失一种 “感觉”
- 一加7 Pro高清渲染图曝光:A+屏幕 超棒手感
- 听说当今程序员很厉害?不,那是你不了解上古时期的那些神级操作
- 用c/c++实现linux下检测网络接口状态【ZT】
- HTTP的⼏种请求⽅法及⽤途小谈(面试)