从零开始实现消息队列(一)

从零开始实现消息队列

  • .
  • 什么是消息队列
  • 需求分析
    • 核心概念
    • 模型

.

在这里插入图片描述

什么是消息队列

相信大家都了解过阻塞队列和生产者消费者模型,而阻塞队列最大的用途,就是用于实现生产者消费者模型,生产者消费者模型有以下好处:

  1. 解耦合

解释:
当主机A给主机B发消息时,A给B发送请求,B给A返回响应,这样的场景中,A和B之间耦合性较高,但是如果在AB之间插入一个阻塞队列,在这种场景中,A发送的请求先存到阻塞队列中,B在接收来自A的请求的时候,取阻塞队列中取就行,就可以很好的解决AB之间的高耦合问题,避免了AB两个主机直接交互.

  1. 削峰填谷

当AB主机直接进行交互的时候,一旦用户访问量过高,可能主机A处理的业务比较轻松,因此不会出现太大的问题,但是主机B却承担着项目主要的工作,可能会因为业务过于超负荷,而导致主机B挂掉,而在有着阻塞队列的生产者消费者模型中,即使主机A接收了大量的用户请求,但是都会将其先放在阻塞队列中,主机B在这种情况下,依旧可以按照正常的状态进行工作.

在实际的后端开发中, 尤其是分布式系统里, 跨主机之间使用生产者消费者模型, 也是非常普遍的需求.因此, 我们通常会把阻塞队列, 封装成⼀个独立的服务器程序, 并且赋予其更丰富的功能.这样的程序我们就称为 消息队列 (Message Queue, MQ)
市面上成熟的消息队列有很多
• RabbitMQ
• Kafka
• RocketMQ
• ActiveMQ
今天,我们就仿照RabbitMQ,来模拟实现一个简单的消息队列

需求分析

核心概念

生产者(Producer)
消费者(Consumer)
中间者(Broker)阻塞队列
发布(Publish)生产者向中间者发送信息的过程
订阅(Subscribe)哪些消费者要从中间者这里获取数据,这个注册的过程就是订阅
消费(Consumer)消费者从中间者获取数据的动作

模型

由上述几个核心概念,构成了各种各样的生产者消费者模型,包括有一对一,一对多,多对多等
一个生产者,一个消费者

在这里插入图片描述
多个生产者,多个消费者
在这里插入图片描述
Broker是最核心的部分,负责消息的存储和转发
在Broker中,也是存在着以下几个概念
• 虚拟机 (VirtualHost): 类似于 MySQL 的 “database”, 是一个逻辑上的集合. 一个BrokerServer 上可以存在多个 VirtualHost.
• 交换机 (Exchange): 存在于VirtualHost,生产者把消息先发送到 VirtualHost的 Exchange 上. 再根据不同的规则, 把消息转发给不同的 Queue.
• 队列 (Queue): 真正用来存储消息的部分. 每个消费者决定自己从哪个 Queue 上读取消息.
• 绑定 (Binding): Exchange 和 Queue 之间的关联关系. Exchange 和 Queue 可以理解成 “多对多” 关系. 使用一个关联表就可以把这两个概念联系起来.
• 消息 (Message): 传递的内容.
这里的Exchange和Queue之间的关系可以类比生产者和消费者之间的关系
在这里插入图片描述
这些概念, 既需要在内存中存储, 也需要在硬盘上存储.
• 内存存储: 方便使用.
• 硬盘存储: 重启数据不丢失.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/681925.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

app逆向-⽹络请求库Retrofit2

文章目录 一、前言二、POST应用三、GET应用 一、前言 Retrofit2 是基于 OkHttp 构建的 RESTful HTTP 客户端,专门用于简化 HTTP 请求的过程,尤其是用于访问 RESTful API。 Retrofit2 提供了一个声明式的方式来定义 REST API 接口,通过注解来…

【NLP 自然语言处理(一)---词向量】

文章目录 什么是NLP自然语言处理发展历程自然语言处理模型模型能识别单词的方法词向量分词 一个向量vector表示一个词词向量的表示-one-hot多维词嵌入word embeding词向量的训练方法 CBOW Skip-gram词嵌入的理论依据 一个vector(向量)表示短语或者文章ve…

P1990 覆盖墙壁题解

题目 有一个长为N宽为2的墙壁,给你两种砖头:一个长2宽1,另一个是L型覆盖3个单元的砖头。如下图: 0 0 0 00砖头可以旋转,两种砖头可以无限制提供。你的任务是计算用这两种来覆盖N2的墙壁的覆盖方法。例如一个23的墙…

13种2023年智能算法进行PK,免费获取matlab代码

本期推出13种2023年智能算法进行PK,在CEC2005和CEC2022函数集进行测试。文末有代码获取方式。 13种算法都是2023年提出的,分别为: 淘金优化器(GRO),雪消融优化器(SAO),霜冰优化算法(RIME),减法优化器(SABO)…

easyx搭建项目-永七大作战(割草游戏)

永七大作战 游戏介绍: 永七大作战 游戏代码链接:永七大作战 提取码:ABCD 不想水文了,直接献出源码,表示我的诚意

(三十七)大数据实战——Solr服务的部署安装

前言 Solr是一个基于Apache Lucene的开源搜索平台,它提供了强大的全文搜索、分布式搜索和数据分析功能。Solr 可以用于构建高性能的搜索应用程序,支持从海量数据中快速检索和分析信息。Solr 使用倒排索引和先进的搜索算法,可实现快速而准确的…

计算机组成原理:存储系统【一】

🌈个人主页:godspeed_lucip 🔥 系列专栏:计算机组成与原理基础 1 主存的模型、寻址1.1 总览1.2 存储器的层次化结构1.3 存储器的分类1.3.1 按层次1.3.2 按照介质1.3.3 按照访问方式1.3.4 按照信息的可更改性1.3.5 按照信息的可保存…

28.Stream流

Stream流 1. 概述2. 方法2.1 开始生成方法2.1.1 概述2.1.2 方法2.1.3 代码示例 2.2 中间操作方法2.2.1 概述2.2.2 方法2.2.3 代码示例 2.3 终结操作方法2.3.1 概述2.3.2 方法2.3.3 代码示例 2.4 收集操作方法2.4.1 概述2.4.2 方法2.4.3 代码示例 3. 代码示例14. 代码示例25. 代…

Linux入门(1)Linux介绍

目录 1. 认识 Linux, 了解 Linux 的相关背景 1.发展史 2. 学会如何使用云服务器 3. 掌握使用远程终端工具 xshell 登陆 Linux 服务器 1. 认识 Linux, 了解 Linux 的相关背景 1.发展史 学习Linux系统编程,你可能要问Linux从哪里来?它是怎么发展的&am…

百面嵌入式专栏(面试题)驱动开发面试题汇总 2.0

沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本篇我们将介绍驱动开发面试题 。 1、Linux系统的组成部分? Linux内核、Linux文件系统、Linux shell、Linux应用程序。 2、Linux内核的组成部分? (1)第一种分类方式:内存管理子系统、进程管理子系统、文件管理子系…

RSIC-V“一芯”学习笔记(三)——读后感以及部分PA0工作

文章目录 一、别像弱智一样提问二、提问的智慧三、安装linux以及配置问题3.1 关于问题配置 一、别像弱智一样提问 提问前,应该清晰问自己几个问题,1. 是否尝试了在搜索引擎进行搜索过2. 相关的手册和文档是否看了3. 找找有没有常见的问题文档&#xff0…

Vue--》深入学习Tailwind CSS掌握优雅而高效的前端样式开发

Tailwind CSS是一个非常强大且灵活的CSS框架,适用于开发者希望高度定制化界面样式的项目。今天博主就 Tailwind CSS 做一个简单介绍以及案例讲解,争取读者阅读文章后入门。 仅靠一篇文章博主也不可能将Tailwind CSS所有内容讲解的面面俱到,在…

66万个 全国行政区划代码表

66万个全国各级行政区划代码表 提供的数据一览 简介 一共有66万个全国各级行政区划,一共有5个级别的行政单位级别 表格头部数据 表格尾部数据 全国行政单位各省份数量统计 数据下载地址 数据整理不易 百度云盘 链接: https://pan.baidu.com/s/1o1C2piYj2wu…

软件实例分享,宠物店兽医电子处方开单系统软件教程

软件实例分享,宠物店兽医电子处方开单系统软件教程 一、软件教程问答 以下教程以 佳易王宠物店兽医电子处方软件V16.0为例说明 软件文件下载可以点击最下方官网卡片——软件下载——试用版软件下载 问:宠物医院电子处方单子使用的纸张大小是多少&…

树莓派编程基础与硬件控制

1.编程语言 Python 是一种泛用型的编程语言,可以用于大量场景的程序开发中。根据基于谷歌搜 索指数的 PYPL(程序语言流行指数)统计,Python 是 2019 年 2 月全球范围内最为流行 的编程语言 相比传统的 C、Java 等编程语言&#x…

compile error ESP32cam.h no such file or directory

解决方法 可以参考这篇文章: But first, you will need to download the esp32cam.h library. For this go to Github and download the esp32cam Zip. GitHub - yoursunny/esp32cam: OV2640 camera on ESP32-CAM, Arduino library 具体就是下面的这篇重要的文章 …

URL编码算法:解决特殊字符在URL中的烦恼

引言: URL编码算法是一种将URL中的特殊字符转换为特定格式的编码方式。它在网络传输中起到了保护数据安全与完整性的重要作用。本文将深入探讨URL编码算法的优点与缺点,并介绍它在Web开发、网络安全等方面的应用。 URL编码解码 | 一个覆盖广泛主题工具…

抽象工厂模式-Abstract Factory Pattern

原文地址:https://jaune162.blog/design-pattern/abstract-factory-pattern/ 引言 首先我们由一个实际问题来引出抽象工厂模式。 考虑这样一个场景,系统中需要向OSS上传文件,以及通过OSS下载文件。而在系统中有不同的业务在使用这两个功能。如下图: 伪代码如下 public in…

怎么使用ChatGPT提高工作效率?

怎么使用ChatGPT提高工作效率,这是一个有趣的话题。 相信不同的人有不同的观点,大家的知识背景和从事的工作都不完全相同,所以最终ChatGPT能起到的作用也不一样。 在编程过程中,如果我们要找一个库,我们最先做的肯定…

算法讲解之字符串

前言: 本文主要讲解算法中和字符串结合的题目,跟字符串结合的算法题种类丰富,主要是跟别的算法结合,下面介绍几道比较经典的题目~ 第一道:14. 最长公共前缀 题目描述: 编写一个函数来查找字符串数组中的…