消息队列项目(1)

news2024/12/23 17:51:55

概念

这里的消息队列, 大致上就是一个生产者消费者模型.

我这个消息队列是仿照 RabbitMQ 的实现原理来进行编写的

需求分析

有几个核心的概念:

  1. 生产者(Producer)
  2. 消费者(Consumer)
  3. 中间人(Broker)
  4. 发布(Publish) :生产者向中间人投递消息的过程
  5. 订阅(Subcribe) :记录哪些消费者要从中间人这里取数据
  6. 消费(Consume): 消费者从中间人这里取数据的过程

 上面是大概的一个流程, 但在消息队列中生产者消费者远远不止一个

BrokerServer

内部关键概念

1. 虚拟主机(VirtualHost): 类似于MySQL 中的 database, 是一个逻辑上的数据集合

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

3. 队列(Queue): 真正用来存储处理消息的实体, 消费者也是从队列中取出数据

4. 绑定(Binding): 把交换机和队列中间, 绑定起关联关系, 交换机和队列之间类似与 与数据库中的 "多对多" 的关系

5. 消息(Message): 服务器 A 给 B 发送的请求就是一个消息, 服务器 B 给 A 发送的响应也是一个消息, 一个消息可以视为一个字符串(二进制数据), 具体包含的数据就得看业务场景

重要的属性

交换机(Exchange)

1. name: 一个作为标识的字符串, 相当于主键

2. type: 交换机有以下几种类型:

Direct 直接交换机:

生产者发送消息的时候, 会指定一个"目标队列"的名字, 交换机收到后, 就会看看绑定的队列里有没有匹配的队列, 有就转发过去, 没有就丢弃消息

Fanout: 扇出交换机:

将与该交换机绑定的所有队列都发送一份一样的消息

Topic: 主题交换机:

有两个关键概念: routingKeybindingKey.

routingKey 在 Message 手里, bindingKey 在 Binding 手里

说白了他们就是两个字符串, 如果这两个字符串通过一些匹配规则匹配上了就能够将消息发送给对应绑定的队列手里

 3. durable: 是否持久化, 意思就是会不会保存在硬盘中

队列(MSGQueue)

1. name: 标识符

2. durable: 是否持久化

绑定(Binding)

1. ExchangeName

2. QueueName

Binding 主要就是靠 exchange 和 queue 直接的联系而存在的, 因此由这个两个进行定义

3. durable: 是否持久化

4. bindingKey: 匹配符, 上面有介绍

消息(Message)

1. MessageID 标识符

2. body 消息主体内容

3. durable 是否持久化

4. offsetBeg 消息在硬盘中头的偏移量

5. offsetEnd 消息在硬盘中尾的偏移量

这个两个偏移量就能很好的找到消息在硬盘中的位置

6. routingKey 匹配符

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

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

相关文章

Java面试题 如何提高自己的算法?

练习一:飞机票 需求:机票价格按照淡季旺季、头等舱和经济舱收费、输入机票原价、月份和头等舱或经济舱。 按照如下规则计算机票价格:旺季(5-10月)头等舱9折,经济舱8.5折,淡季(11月到来年4月&a…

【Java可执行命令】(十五)Java进程状态信息获取工具 jps:获取和监控Java进程的状态信息 ~

Java可执行命令之jps 1️⃣ 概念2️⃣ 优势和缺点3️⃣ 使用3.1 语法格式3.2 可选参数:-q3.3 可选参数:-m3.4 可选参数:-l3.5 可选参数:-v3.6 可选参数:-V 4️⃣ 应用场景🌾 总结 1️⃣ 概念 JPS&#xff…

【BEV感知】1-BEV感知算法介绍

1-BEV感知算法介绍 1 什么是BEV感知算法?1.1 什么是BEV?1.2 什么是感知?1.3 什么是算法?1.4 什么是BEV感知? 1 什么是BEV感知算法? 1.1 什么是BEV? Bird’s-Eye-View,尺度变化小、…

客户端电脑使用 FTP的Cadence_CIS库方法说明 (下)

简介:随着企业的规模扩大,硬件工程师的增多,使用统一服务器上的库管理,可以减少设计错误,提高效率。 使用在FTP上布局Cadence_CIS库,是目前的主流的做法之一; 本文方法,用于已经配置…

【网络基础进阶之路】一文弄懂TCP的三次握手与四次断开

系列文章: 【网络基础进阶之路】路由器间的静态综合详解 文章目录: 一、TCP协议 二、三次握手——建立连接 三、四次断开——结束连接 一、TCP协议 TCP是一种面向广域网的通信协议,目的是在跨越多个网络通信时,为两个通信端…

如何利用闭环思维解决企业营销问题

彼得圣吉在他的畅销书《第五项修炼》一书中主要介绍了“系统思考”的第五项修炼,系统思考的方法有三个基本元件:不断增强的回馈,反复调节的回馈,和时间滞延。其不断增强的回馈其实就是增强闭环理论,其在企业管理中有很…

嘿嘿嘿~卷王来喽~今天我被卷s了,谁也白想活zhuo!

前言 嘿嘿嘿~热乎乎的卷王来喽,卷呀!你们怎么不卷!(啪!电脑一合),好!今天,我卷了,我得卷s,但是!我被卷了,你们也白想活着…

极狐GitLab 10 年开源研发管理实践:4 个核心步骤突破效能瓶颈

目录 研发效能实践的痛点 4 步击破痛点,提升研发效能 1. 明确目标 2. 优化研发流程 ➤ 2.1 文档先行 ➤ 2.2 可追踪的任务 ➤ 2.3 自动化工作流 3. 注重代码质量 ➤ 3.1 代码门禁:严格要求,提前报错 ➤ 3.2 合并请求:代…

Netty 入门指南

文章目录 前言Netty介绍Netty发展历程Netty核心组件实现HTTP服务器总结 前言 上文《BIO、NIO、IO多路复用模型详细介绍&Java NIO 网络编程》介绍了几种IO模型以及Java NIO,了解了在网络编程时使用哪种模型可以提高系统性能及效率。即使Java NIO可以帮助开发人员…

【java】【maven】【高级】MAVEN聚合继承属性等

目录 1、模块开发与设计 2、聚合 2、继承 3、属性 4、版本管理 5、资源配置 6、多环境配置 7、多环境开发配置 8、跳过测试 9、私服 前言:maven的高级使用包含分模块开发与设计、聚合、继承、属性、版本管理、资源配置、多环境配置、多环境开发配置、跳过…

软件测试缺陷报告

缺陷报告是描述软件缺陷现象和重现步骤地集合。软件缺陷报告Software Bug Report(SBR)或软件问题报告Software Problem Report(SPR) 作用:缺陷报告是软件测试人员的工作成果之一,体现软件测试的价值缺陷报…

如何知道企业是否办理过等保备案?哪里可以查询?

对于等保政策细节,大家还存在很多疑问,例如有人在问,如何知道企业是否办理过等保备案?哪里可以查询?今天我们就来简单聊聊,仅供参考。 如何知道企业是否办理过等保备案? 一般企业办理过等保备案…

RISC-V基础指令之shift移动指令slli、srli、srai、sll、srl、sra

RISC-V的shift指令是用于对一个寄存器或一个立即数进行位移运算,并将结果存放在另一个寄存器中的指令。位移运算就是把一个操作数的每一位向左或向右移动一定的位数,得到一个新的位。RISC-V的shift指令有以下几种: slli:左逻辑位…

8.3 作业

整理思维导图 2. 递归实现&#xff0c;输入一个数&#xff0c;输出这个数的每一位 #include <myhead.h> void fun(int t) {if(t 0) return;fun(t/10);printf("%d\n",t%10); } int main(int argc,const char *argv[]) {int t1623809; fun(t);return 0; } 3.递…

虹科方案 | 虹科AR助力汽车产业降本增效!

虹科AR远程解决方案 将高性能的Vuzix AR眼镜与工业远程软件相结合&#xff0c;一线员工使用AR眼镜呼叫专家&#xff0c;由远程专家进行诊断并给出建议&#xff0c;支持一线员工与远程专家实时语音视频交互、AR标注指引、发送文件图片并进行会议录制&#xff0c;帮助一线员工解放…

Linux--对同一个文件分别执行r和w指令,其得到的fd一样吗?

代码&#xff1a; #include <stdio.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h>int main() {int fdopen("log.txt",O_WRONLY|O_CREAT|O_TRUNC);printf("fd_w: %d\n",fd);fdopen("log.txt",O_…

关于账号安全的一些思考

0x01-提升账号安全的目的 注册账号是大多数作弊场景的第一步&#xff0c;例如交易场景的生单、营销场景的秒杀活动等都需要账号的参与。其次账号相对于设备、支付卡等能够给唯一标识用户的资源中具备更好的主动权&#xff0c;因此提升账号安全能力是有必要的。 0x02-问题分析…

TikTok数据分析 | 用好超店有数,生意增长快人一步

TikTok在东南亚崛起之快令人叹服。 在东南亚第一大经济体印度尼西亚&#xff0c;超过200万小商家入驻了TikTok的电商平台&#xff1b; TikTok Shop 以6.9亿美元的收入市场份额超越Lazada成为越南第二大电商平台&#xff1b; 2023年泰国TikTok Shop的销售额一路猛涨&#xff…

交互流程图设计软件都有哪些?

交互流程图是设计行业信息流、观点流或组件流的图形代表。但是市场上应该如何选择各种交互流程图软件呢&#xff1f;如何使用高质量的交互流程图软件来绘制高端氛围的高档流程图&#xff1f;今天&#xff0c;小边给您带来了十个超级实用的交互流程图软件&#xff0c;我希望能帮…

8-3作业

思维导图 递归实现&#xff0c;输入一个数&#xff0c;输出这个数的每一位 #!/bin/bashif (( $# < 1 )); thenexit 1 finum$1function print_digits {if (( $1 < 10 )); thenecho $1elseprint_digits $(( $1 / 10 ))echo $(( $1 % 10 ))fi }print_digits $num 递归实现&…