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

这篇具有很好参考价值的文章主要介绍了项目实战 — 消息队列(1) {需求分析}。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

一、什么是消息队列

二、需求分析

🍅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)消费者从中间人手里取出数据

一对一:消费者和生产者 

项目实战 — 消息队列(1) {需求分析},项目,中间件多对多:消费者和生产者 

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

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

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

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

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

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

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

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


 🍅2、核心API

        * 创建队列(queueDelare)

        * 销毁队列(queueDelete)

        * 创建交换机(exchangeDeclare)

        * 创建绑定(queueBind)

        * 解除绑定(queueUnbind)

        * 发布消息(basicPublish)

        * 订阅消息(basicConsume)

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


🍅3、交换机类型

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

* Direct 直接交换机

* Fanout 扇出交换机

* Topic 主题交换机

* Header消息交换机

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

🎊Direct 直接交换机

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

 🎊Fanout 扇出交换机

给每个队列都转发:

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

🎊Topic主题交换机

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

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

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

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


🍅 4、持久化

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

以内存为主,硬盘为辅。

在内存中存储的原因:

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

在硬盘上存储的原因:

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


🍅5、网络通信 

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

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

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


🍅6、应答模式

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

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

三、模块划分

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

服务器模块:

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

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

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

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

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

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

公共模块:

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

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

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

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

四、测试用例设计

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

五、总结

具体工作:

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

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

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

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

        4.持久化,数据的存储

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

 源码:https://pan.baidu.com/s/1gOaG4TrrtTAbIU7DRzRY5Q?pwd=1234文章来源地址https://www.toymoban.com/news/detail-615134.html

到了这里,关于项目实战 — 消息队列(1) {需求分析}的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 深入理解Java消息中间件-组件-消息队列

    引言: 消息中间件在现代分布式系统中扮演着至关重要的角色,它解决了系统之间异步通信和解耦的需求。而在消息中间件的架构中,核心组件之一就是消息队列。本文将深入探讨消息队列的架构组件,帮助读者加深对消息中间件的理解和应用。 一、什么是消息队列 消息队列

    2024年04月27日
    浏览(47)
  • 消息队列中间件(二)- RabbitMQ(一)

    接收,存储,转发消息 生产者 交换机 队列 消费者 简单模式 工作模式 发布 路由模式 主题模式 发布订阅模式 Broker 接收和分发消息的应用 Virtual host 虚拟分组 Connection: TCP连接 Channel: 节省连接,每次访问建立一次Connection消耗太大,所以使用信道代替连接 交换机 队列 www.r

    2024年02月11日
    浏览(63)
  • 消息队列中间件 MetaQ/RocketMQ

    推荐电子书:云原生架构白皮书 2022版-藏经阁-阿里云开发者社区 (aliyun.com) 简介—— 消息队列中间件 MetaQ/RocketMQ 中间件 MetaQ 是一种基于队列模型的消息中间件,MetaQ 据说最早是受 Kafka 的影响开发的,第一版的名字 \\\"metamorphosis\\\",是奥地利作家卡夫卡的名作——《变形记》。

    2024年02月14日
    浏览(50)
  • 「中间件」rabbitmq 消息队列基础知识

    RabbitMQ是一个消息队列软件,用于在应用程序之间转发消息。以下是RabbitMQ的基本概念: 消息:RabbitMQ中的消息是传递的基本单位,它由消息头和消息体组成。 队列(Queue):队列是消息的缓冲区,用于存储待处理的消息。 交换器(Exchange):交换器是接收生产者发送的消息并

    2024年02月07日
    浏览(56)
  • 常用的消息队列和中间件都有哪些

    常用的消息队列和中间件有以下几种: RabbitMQ:RabbitMQ是一个开源的消息队列中间件,使用Erlang语言编写。它具有可靠性、灵活性和易用性的特点,支持多种消息协议。 Kafka:Kafka是一个高吞吐量的分布式发布订阅消息系统,由Apache开发。它主要用于处理大规模的实时数据流,

    2024年01月17日
    浏览(55)
  • 深入详解高性能消息队列中间件 RabbitMQ

      目录 1、引言 2、什么是 RabbitMQ ? 3、RabbitMQ 优势 4、RabbitMQ 整体架构剖析 4.1、发送消息流程 4.2、消费消息流程 5、RabbitMQ 应用 5.1、广播 5.2、RPC VC++常用功能开发汇总(专栏文章列表,欢迎订阅,持续更新...) https://blog.csdn.net/chenlycly/article/details/124272585 C++软件异常排查从入

    2024年02月05日
    浏览(72)
  • 消息队列中间件 - Docker安装RabbitMQ、AMQP协议、和主要角色

    不管是微服务还是分布式的系统架构中,消息队列中间件都是不可缺少的一个重要环节,主流的消息队列中间件有RabbitMQ、RocketMQ等等,从这篇开始详细介绍以RabbitMQ为代表的消息队列中间件。 AMQP协议 AMQP协议是一个提供统一消息服务的应用层标准协议,基于此协议的客户端与

    2024年02月03日
    浏览(57)
  • 项目实战 — 消息队列(1) {需求分析}

    目录 一、什么是消息队列 二、需求分析 🍅1、核心概念  🍅2、核心API 🍅3、交换机类型 🍅 4、持久化 🍅5、网络通信  🍅6、应答模式 三、模块划分 四、测试用例设计 五、总结 消息队列(Message Queue ,MQ),就是将阻塞队列的数据结构,提取成了一个程序,独立进行部署。

    2024年02月15日
    浏览(37)
  • 基于golang多消息队列中间件的封装nsq,rabbitmq,kafka

    场景 在创建个人的公共方法库中有这样一个需求,就是不同的项目会用到不同的消息队列中间件,我的思路把所有的消息队列中间件进行封装一个消息队列接口(MQer)有两个方法一个生产一个消费,那么在实例化对象的时候根据配置文件指定当前项目使用的那个消息队列中

    2024年02月14日
    浏览(58)
  • 消息队列中间件,RabbitMQ的使用,死信队列,延迟队列,利用枚举实现队列,交换机,RountKey的声明

    目录 0.交换机种类和区别 1.声明队列和交换机以及RountKey 2.初始化循环绑定 3.声明交换机 4.监听队列 4.1 监听普通队列 4.2监听死信队列  5.削峰填谷的实现 Direct Exchange(直连交换机) : 直连交换机将消息发送到与消息的路由键完全匹配的队列。它是最简单的交换机类型之一。

    2024年04月23日
    浏览(133)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包