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

从零开始实现消息队列

  • .
  • 核心API
  • 交换机类型
  • 持久化
  • 网络通信
    • Connection和Channel
  • 消息应答
  • 模块划分

.

在这里插入图片描述

核心API

对于Broker来说,要实现以下核心API,通过这些API来实现消息队列的基本功能.

  1. 创建队列(queueDeclare)
  2. 销毁队列(queueDelete)
  3. 创建交换机(exchangeDeclare)
  4. 销毁交换机(exchangeDelete)
  5. 创建绑定(queueBind)
  6. 解除绑定(queueUnbind)
  7. 发布消息(basicPublish)
  8. 订阅消息(basicConsume)
  9. 确认消息(basicAck)

Producer和Consumer则通过网络的方式,远程调用这些API,实现生产者消费者模型
对于RabbitMQ而言,VirtualHost也只是可以进创建和删除,但是我们这里就不实现了

交换机类型

对于 RabbitMQ而言,交换机有以下四种类型

  1. Direct,生产者发布消息时,直接指定被该交换机绑定的队列名
  2. Fanout,生产者发送的消息会被复制到该交换机上的所有队列中
  3. Topic,绑定队列到交换机上时,指定一个字符串为bindingKey,发送消息指定一个字符串为routingKey,当bindingKey和routingKey满足一定的匹配条件的时候,则把消息投递到指定队列中
  4. Header

其中header比较复杂,我们这里就不进行实现了,并且常见的也就只有前三种

持久化

Exchange,Queue,Binding,Message都有持久化需求,要保证程序重启和主机重启过后,上述内容不会丢失.

网络通信

生产者和消费者都是客户端,Broker是服务器,客户端和服务器之间是通过网络进行通信的,在网络通信的过程中,客户端部分要提供对应的API,来实现对服务器的操作

  1. 创建Connection
  2. 关闭Connection
  3. 创建Channel
  4. 关闭Channel
  5. 加上Broker服务器有的所有API

Connection和Channel

Connection对应一个TCP连接.
Channel则是Connection中的逻辑通道.
一个Connection中可以包含多个Channel.
Channel和Channel之间的数据是独立的,不会相互干扰
这样的设计是为了避免频繁的创建关闭TCP连接,达到长连接的效果

消息应答

被消费的消息,需要进行应答
应答模式分为两种:

  1. 自动应答:消费者只要消费了消息,就算应答完毕了,Broker就会直接删除这个消息
  2. 手动应答:消费者需要手动调用应答接口,Broker接收到了应答请求之后,才会对这个消息进行删除(可靠性更高)

模块划分

在这里插入图片描述

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

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

相关文章

【Git】上传本地文件到Git(以Windows环境为例)

Git 的下载参考:Git 安装及配置 一、Git 上传的整体流程 1、工作区 > 本地仓库 将本地文件上传到Git,需要先上传到本地仓库,然后再上传到远程仓库。要上传文件到本地仓库,不是直接拷贝进去的,而是需要通过命令一步…

AI-数学-高中-25-三角函数一三角函数对称性

原作者视频:【三角函数】【考点精华】3三角函数对称性(重要)(中档)_哔哩哔哩_bilibili 1.一个对称点\直线思路: 2.关于两点或两直线对称: 3.两个对称:一个关于点对称、一个关于直线…

26.篮球练习

Description 小徐酷爱打篮球,在小学期的前两周半都在练习篮球。今天,小徐想要练习如何突破。 练习场地可由如下所示的网格图表示,图中的位置可用坐标表示。 其中A点(0,0)为小徐的起始位置,B点(n,m)为小徐想要到达的位置。 一起训…

快速搭建 nfs 环境, 解决 nfs 搭建时的疑难杂症

博客原文 nfs 环境搭建 简介: NFS(Network File System)即网络文件系统,是FreeBSD支持的文件系统中的一种,它允许网络中的计算机之间共享资源。 在NFS的应用中,本地NFS的客户端应用可以透明地读写位于远端NFS服务器上…

22年中科院1区算法|白鲸优化器BWO原理及其利用与改进(Matlab/Python)

文章来源于我的个人公众号:KAU的云实验台,主要更新智能优化算法的原理、应用、改进 CEC2005中的测试 本文KAU将介绍一个2022年发表在中科院1区期刊KBS上的优化算法——白鲸优化算法(Beluga Whale Optimization,BWO)[1] 该算法由大连理工…

STM32单片机的基本原理与应用(七)

超声波测距实验 基本原理 超声波测距实验是STM32单片机通过控制HC-SR04超声波模块,使其发送超声波,遇到物体反射回超声波来实现距离测量,其原理就是在发射超声波到接收超声波会有一段时间,而超声波在空气中传播的速度为声速&…

【大厂AI课学习笔记】【1.6 人工智能基础知识】(3)神经网络

深度学习是机器学习中一种基于对数据进行表征学习的算法。观测值(例如一幅草莓照片)可以使用 多种方式来表示,如每个像素强度值的向量,或者更抽象地表示成一系列边、特定形状的区域等。 深度学习的最主要特征是使用神经网络作为计算模型。神经网络模型 …

汉服租赁网站:Java技术的文化应用

✍✍计算机编程指导师 ⭐⭐个人介绍:自己非常喜欢研究技术问题!专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目:有源码或者技术上的问题欢迎在评论区一起讨论交流! ⚡⚡ Java实战 |…

指纹浏览器能为TikTok运营提供哪些便利?

在数字时代,TikTok已成为全球短视频平台的佼佼者,吸引了数以亿计的活跃用户。为了更有效地进行TikTok运营,许多人开始探索先进的工具和技术。本文将重点探讨指纹浏览器如何为TikTok运营提供便利,提高账户管理的效率和安全性。 1.账…

用code去探索理解Llama架构的简单又实用的方法

除了白月光我们也需要朱砂痣 我最近也在反思,可能有时候算法和论文也不是每个读者都爱看,我也会在今后的文章中加点code或者debug模型的内容,也许还有一些好玩的应用demo,会提升这部分在文章类型中的比例 今天带着大家通过代码角度…

Ubuntu Desktop - Details (设备详情)

Ubuntu Desktop - Details [设备详情] 1. OverviewReferences 1. Overview System Settings -> Details -> Overview ​ References [1] Yongqiang Cheng, https://yongqiang.blog.csdn.net/

学习Android的第十天

目录 Android CheckBox 复选框 获得选中的 CheckBox 的值 自定义点击效果 改变文字与选择框的相对位置 修改文字与选择框的距离 Android ToggleButton 开关按钮 改变 ToggleButton 的状态和文本 Android Switch 开关 改变 Switch 的状态和文本 Android CheckBox 复选框…