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

篇章二 需求分析(一)

目录

1.知名MQ

2.需求分析

2.1 核心概念

2.2 生产者消费者模型的类别

2.3 BrokerServer 内部的关键概念(MQ)

1.虚拟主机(Virtual Host)

2.交换机(Exchange)

3.队列(Queue)

4.绑定(Binding)

5.消息(Message)

2.4 结构图


1.知名MQ

这么有用的组件,很显然市面上出现了不少:

1.RabbitMQ:

2.Kafka

3.RocketMQ

4.ActiveMQ

这些MQ都大同小异

关于MQ的使用,很显然不是我们的重点,具体介绍后续会开栏目进行讲解。我们的目的是如何模拟实现出来一个。

2.需求分析

2.1 核心概念

参考RabbitMQ,首先来让我们了解一些贯穿项目的核心概念

1.生产者(Producer)

2.消费者(Consumer)

3.中间人(Broker)

4.发布(Publish)  生产者向中间人投递消息的过程

5.订阅(Subscribe)哪些消费者要从中间人取数据,这个注册的过程,成为“订阅”

6.消费(Consume)消费者从中间人这里取数据的动作:

举个栗子:

我要定一个期刊

1.生产者:作者

2.中间人:书店老板

3.消费者:我

4.发布: 作者写出新的期刊,交给书店老板

5.订阅:提前和书店老板说好,我要定好几个月的期刊,把钱给了老板

6.消费:我从书店老板那里拿走期刊

2.2 生产者消费者模型的类别

此时我们要用的模型是生产者消费者类型,但是它具体有哪些类别呢?

生产者 vs 消费者

1. 1 vs 1

2. N vs N

2.3 BrokerServer 内部的关键概念(MQ)

1.虚拟主机(Virtual Host)

        类似于 我们熟悉的MySQL 中的 database,算是一个“逻辑”上的数据集合。

        一个BrokerServer 上也可以组织多种不同类别的数据,可以使用 Virtual Host做出逻辑上的区分

        实际开发中,一个BrokerServer可能会同时用来管理多组 业务线上的数据,就可以使用 Virtual Host 做出区分。

业务线的简单理解:

        百度可以搜索图片、网页、新闻等,有很多不同的子版块 ,每个子版块都可以视为一个单独的业务线

2.交换机(Exchange)

        生产者把消息投递给Broker Server 实际上,是先把消息给了 Broker Server上的某个交换机,再由交换机把消息转发给对应的队列

简单理解:类似于公司前台

3.队列(Queue)

        真正用来存储消息的实体。后续消费者也是从对应的队列取数据。一个大的消息队列可以有很多具体的小队列。

4.绑定(Binding)

把交换机和队列之间,建立起关联关系。

可以把交换机 和 队列 视为是类似于 数据库 中的“多对多”这样的关系。

一个交换机可以对应多个队列

一个队列也可以被多个交换机对应

在数据库中,表示多对多的关系,会使用一个中间表/关联表。

所以,在MQ中,也有一个这样的中间表,所谓的绑定就是中间表中的一项。

5.消息(Message)

简单理解:服务器A 给 服务器B 发的请求(通过MQ转发),就是一个消息。

当然,服务器B 给 服务器A 回的响应(通过MQ转发),也是一个消息。

一个消息,可以视为一个字符串(二进制数据)。

消息中具体包含什么由程序员决定。

2.4 结构图

所以我们参考RabbitMQ,结合上面的一些核心概念来画出我们的结构图

如果想看RabbitMQ的结构图

RabbitMQ 是一个高性能、高可靠的消息中间件,支持多种消息协议(如 AMQP、STOMP、MQTT 等),能够实现应用程序之间的异步通信、负载均衡、解耦等功能。它由 Erlang 语言编写,具有良好的高可用性和扩展性。

如果想了解AMQP协议

AMQP(Advanced Message Queuing Protocol)是一种高级消息队列协议,广泛用于构建可靠的消息中间件。

http://www.lryc.cn/news/2384504.html

相关文章:

  • 汽车充电过程中--各个电压的关系(DeepSeek)
  • 图解深度学习 - 机器学习简史
  • Gmsh 代码深度解析与应用实例
  • 49页 @《人工智能生命体 新启点》中國龍 原创连载
  • 量化研究---bigquant策略交易api研究
  • 编译原理 期末速成
  • echarts之漏斗图
  • 零基础设计模式——第二部分:创建型模式 - 原型模式
  • Honeywell TK-PRS021 C200
  • java 进阶 1.0.3
  • 从 Docker 到 runC
  • PET,Prompt Tuning,P Tuning,Lora,Qlora 大模型微调的简介
  • 02-jenkins学习之旅-基础配置
  • 互联网大厂Java求职面试:云原生架构与AI应用集成解决方案
  • Python爬虫实战:研究Crawley 框架相关技术
  • C#实现List导出CSV:深入解析完整方案
  • Appium+python自动化(三)- SDK Manager
  • 3D Gaussian Splatting for Real-Time Radiance Field Rendering——文章方法精解
  • 主成分分析基本概念及python代码使用
  • MCP如何助力智能交通系统?从数据融合到精准决策
  • 什么是抽象类?是所有函数都是纯虚函数吗?
  • 计算机视觉与深度学习 | Python实现ARIMA-WOA-CNN-LSTM时间序列预测(完整源码和数据
  • 【Unity实战笔记】第二十四 · 使用 SMB+Animator 实现基础战斗系统
  • C/C++的OpenCV 进行图像梯度提取
  • Redis 缓存使用的BigKey问题
  • 【Java高阶面经:消息队列篇】22、消息队列核心应用:高并发场景下的解耦、异步与削峰
  • 软媒魔方——一款集合多种系统辅助组件的软件
  • Unity场景的加载与卸载
  • 多路径可靠传输协议(比如 MPTCP)为什么低效
  • 塔能高温冰蓄冷技术:工厂能耗精准节能的创新之路