项目实战 — 消息队列(1) {需求分析}

文章介绍了消息队列的基本概念,包括生产者、消费者、中间人(Brocker)、发布与订阅等,并详细讲解了RabbitMQ中的核心API,如队列声明、交换机类型、持久化机制和网络通信方式。此外,提到了交换机的Direct、Fanout和Topic等不同类型以及应答模式。文章还概述了模块划分和测试用例设计,但不涉及分布式部署,仅支持单机服务。
摘要由CSDN通过智能技术生成

目录

一、什么是消息队列

二、需求分析

🍅1、核心概念

 🍅2、核心API

🍅3、交换机类型

🍅 4、持久化

🍅5、网络通信 

🍅6、应答模式

三、模块划分

四、测试用例设计

五、总结


一、什么是消息队列

消息队列(Message Queue ,MQ),就是将阻塞队列的数据结构,提取成了一个程序,独立进行部署。也就是实现一个生产者消费模型。

有关生产者消费者模型,参考多线程 — 阻塞队列_多线程阻塞队列_‍️藿香正气水的博客-CSDN博客这里就不多说。

阻塞队列的生产者消费者模型,实在一个进程内部进行的,而消息队列的生产者消费者模型是进程和进程之间,服务和服务之间进行的。它是一个分布式系统,是由一组服务器构成的“集群”。

一些知名的MQ:* RabbitMQ,* Kafka,* RocketMQ,ActiveMQ

这里实现的消息队列是基于RabbitMQ进行编写的。

二、需求分析


🍅1、核心概念

        核心概念

                1.生产者(Producer)

                2.消费者(Consumer)

                3.中间人(Brocker)

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

                5.订阅(Subscribe)哪些消费者从中间人取数据,称为“订阅”

                6.消费 (Consume)消费者从中间人手里取出数据

一对一:消费者和生产者 

多对多:消费者和生产者 

 

 关于BrockerServer涉及到的相关概念:

        1. 虚拟机(Virtual Host),类似于MySQL中的database,是一个“逻辑上”的数据集合

        2. 交换机(Exchange),生产者把消息投递给BrokerServer,实际上是先把消息交给了Brocker Server上的某个交换机,再由交换机把消息转发给对应的队列

        3. 队列(Queue), 真正用来存储处理消息的实体,后续消费者也是从队列中取出数据。一个消息队列中,可以由很多具体的小队列。

        4. 绑定(Binding),将交换机和队列联系起来,主要是“多对多”这样的关系。一个交换机可以对应到多个队列,一个队列也可以被多个交换机对应。

        5. 消息(Message),也就是服务器A发给B的请求,然后通过MQ转发。服务器B给A的响应,通过MQ来转发也是一个消息。


 🍅2、核心API

        * 创建队列(queueDelare)

        * 销毁队列(queueDelete)

        * 创建交换机(exchangeDeclare)

        * 创建绑定(queueBind)

        * 解除绑定(queueUnbind)

        * 发布消息(basicPublish)

        * 订阅消息(basicConsume)

        * 确认消息(basicAck)保证了消息的处理没有遗漏


🍅3、交换机类型

交换机再转发消息的时候,是有一套转发规则的,以下是几种不同的交换机类型,描述了不同的转发规则:主要有四种

* Direct 直接交换机

* Fanout 扇出交换机

* Topic 主题交换机

* Header消息交换机

项目中主要使用了前三种。

🎊Direct 直接交换机

生产者发送消息的时候,会指定一个“目标队列的名字”,交换机收到之后,然后查看绑定的队列中是否含有匹配的队列,如果有,就直接转发过去;如果没有,就直接丢弃。

 🎊Fanout 扇出交换机

给每个队列都转发:

🎊Topic主题交换机

 (1)bindingKey:把队列和交换机绑定的时候,指定一个单词(暗号)

 (2)routingKey:生产者发送消息的时候,也指定一个单词。

当bindingKey和routingKey之间能够对上暗号(单词),就可以将这个个消息发给对应的队列了。


🍅 4、持久化

将数据在内存和硬盘中各自都存储一份。

以内存为主,硬盘为辅。

在内存中存储的原因:

        在内存中组织数据,效率回避在硬盘上要高很多。对于MQ来说,高效的转发和处理数据是很关键的指标。

在硬盘上存储的原因:

        为了防止内存中的数据随着进程的重启或者主机的重启二而丢失。


🍅5、网络通信 

使用 TCP + 自定义的应用层协议 实现生产者 / 消费者 / BrockerServer之间的交互工作。

自定义的协议主要工作是让客户端通过网络,调用brocker server提供的编程接口。


🍅6、应答模式

        自动应答: 消费者取走了消息,就算应答了

        手动应答:basicAcK方法属于手动应答(消费者主动调用该api进行应答)

三、模块划分

服务器模块:

        内存管理:高效的支撑API实现

        硬盘管理:持久化存储,重启以后不丢失信息

        文件管理:主要用于管理消息。

        数据库管理:存储的是元数据,使用数据库提供的增删改查管理数据。

        消息转发:前面提到的交换机类型对应的准发规则

        API实现:前面写的八种API。

公共模块:

        通信协议:为了实现客户端和服务器之间的通信来完成的逻辑,基于TCP实现的自定义的应用层协议,通过该协议,完成客户端 / 服务器的远程调用方法。

        序列化 / 反序列化:通过网络传输对象,把对象存储到硬盘上。

        序列化:把对象 => 二进制的数据序列

        反序列化:把而简直数据序列 => 对象

四、测试用例设计

五、总结

具体工作:

        1.需要实现生产者,broker server,消费者三个部分

        2.针对生产者消费者,主要编写客户端和服务器的网络通信部分

        给客户端提供一组api,让客户端的业务代码来调用,从而通过网络通信的方式远程调用broker server上面的方法

        3.实现Broker Server以及broker server内部的一些基本概念和核心的api。

        4.持久化,数据的存储

这里的MQ不支持分布式部署,只是一个单机的,能够给多个生产者消费者提供服务。

 源码:https://pan.baidu.com/s/1gOaG4TrrtTAbIU7DRzRY5Q?pwd=1234

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值