当前位置: 首页 > news >正文

基于RabbitMQ的模拟消息队列需求文档

文章目录

    • 一、项目背景
    • 二、需求分析
      • 1.核心概念
      • 2.BrokerServer核心组件
      • 3.核心API
      • 4.交换机类型
      • 5.持久化
      • 6.网络通信
      • 7.消息应答
    • 三、消息队列模块划分

一、项目背景

什么是消息队列?
消息队列就是,基于阻塞队列,封装成一个独立的服务器程序,实现跨主机使用生产者-消费者模型。生产者生产消息到消息队列,消费者从消息队列消费数据。

二、需求分析

1.核心概念

  • 生产者(Producer):生产消息的客户端
  • 消费者 (Consumer) :消费消息的客户端
  • 中间人 (Broker):消息队列服务器
  • 发布 (Publish):生产者发送消息给中间人
  • 订阅 (Subscribe) :要消费消息的消费者
  • 消费 (Consume):消费者从中间人读取消息

在这里插入图片描述在这里插入图片描述

Producer Client:生产者客户端
Broker Server:消息队列服务器
Consumer Client:消费者客户端
Publish Message:生产消息
Subscribe Messge:订阅消息

2.BrokerServer核心组件

  • 虚拟主机(VirtualHost):类似于MySQL的dataBase,用来区分不同组的业务。
  • 交换机(Exchange):生产者发送消息给BrokerServer,实际上是给某个交换机发送消息,交换机再把消息转发给队列。
  • 队列(Queue):存储消息
  • 绑定(Binding):交换机和队列之间的绑定关系(多对多)
  • 消息(Message):传递的内容

3.核心API

  • 创建交换机(exchangeDeclare)
  • 删除交换机(exchangeDelete)
  • 创建队列(queueDeclare)
  • 删除队列(queueDelete)
  • 创建绑定(queueBind)
  • 删除绑定(queueUnbind)
  • 发布消息(basicPublish)
  • 订阅消息(basicConsume)

注意,消费者得到服务器中的消息有两种方式:
一种是消费者主动从服务器中取。
一种是服务器推送消息给消费者。这里的订阅消息,只支持服务器推送消息给消费者。

  • 确认消息(basicAck)

消费者主动告诉消息队列已经收到消息了。(成功确认)

4.交换机类型

  • 直接交换机 (Direct Exchange)
    根据队列名查找队列,如果存在,转发消息;不存在,就把消息丢弃。
  • 扇出交换机(Fanout Exchange)
    转发消息至该交换机绑定的所有队列。
  • 主题交换机(Topic Exchange)
    交换机和队列绑定的时候,绑定关系中带有一个bindingKey(上联)。发送消息的时候,消息带有一个routingKey(下联)。在该交换机绑定的所有队列中查找,如果routingKey和bindingKey对上的话,就转发给该队列。没有,就丢弃消息。
    在这里插入图片描述
    在这里插入图片描述

5.持久化

当服务器重启后,内存的数据都会丢失。这个时候,需要通过持久化来保证数据不丢失。通过将数据保存到硬盘上来实现持久化。

  • 交换机、队列、绑定通过数据库来管理
  • 消息通过二进制的格式保存到文件中,重启后,从文件中读取数据到内存。
    (序列化/反序列化)

6.网络通信

生产者和消费者都是客户端,需要通过网络与服务器进行交互。这里的通信协议是基于TCP的自定义应用层协议。

在网络通信过程中,客户端要提供对应API,通过调用这个API来远程调用服务器的API,实现对服务器的操作。

客户端这边除了对应服务器的方法外,还需要实现其他的方法。

  • 创建Connection(newConnection)
  • 销毁Connection(close)

一个Connetion对象视作一次TCP连接。

  • 创建Channel (createChannel)
  • 销毁Channel(close)

Channel是一次逻辑上的连接。一个Connection里包含多个Channel。连接/断开TCP的成本太高。但是客户端和服务器的交互业务很多,所以通过多个Channel,传输不同的数据(channel之间互不相干),达到复用TCP的效果。

7.消息应答

  • 服务器推送消息给消费者的时候,自动确认。
  • 消费者手动调用basicAck这个方法。

三、消息队列模块划分

在这里插入图片描述

相关文章:

基于RabbitMQ的模拟消息队列需求文档

文章目录 一、项目背景二、需求分析1.核心概念2.BrokerServer核心组件3.核心API4.交换机类型5.持久化6.网络通信7.消息应答 三、消息队列模块划分 一、项目背景 什么是消息队列? 消息队列就是,基于阻塞队列,封装成一个独立的服务器程序&#…...

“北科Java面试宝典(211最详细讲解)“

Version : V1.0 北科Java面试宝典一、Java基础面试题【24道】二、JVM虚拟机面试题【14道】三、集合相关面试题【17道】四、多线程 【25道】五、IO【5道】六、网络编程 【9道】七、MySQL以及SQL面试题【20道】八、常用框架【19道】九、中间件和分布式 【54道】十、设计模式面试 …...

自动化测试工具Selenium的语法续.

OK,那么上篇博客我们介绍了如何搭建基于Javaselenium的环境,并且使用selenium的一些语法给大家演示了如何进行自动化测试的案例,那么本篇博客我们来继续学习selenium的一些其他的比较重要的语法,感谢关注,期待三连~ 目…...

稳恒电路直观理解

图v0 图v1 图v2 图v3 图v4 自由正电荷s,定向移动过程中,在任何一位置处受力都是平衡的,即s所受总合力为0, 即s处于匀速运动:直导体中匀速直线运动、拐弯处匀速圆周运动 起初t0时刻, s的势能是最高的E0,之…...

LeetCode面试经典150题(day 3)

169. 多数元素 难度:简单 给定一个大小为 n 的数组 nums ,返回其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。 你可以假设数组是非空的,并且给定的数组总是存在多数元素。 示例 1: 输入:nums …...

掌握这个工具,轻松管理所有物流信息

在电子商务高度发达的今天,物流快递行业在全球范围内发挥着至关重要的作用。然而,在如此复杂的物流环境中,快递退回件的管理和查询成为了一个难题。为了解决这个问题,我们有一个神奇的工具——快递批量查询高手。 快递批量查询高…...

1.Python操作txt文本

文章目录 1.Python读取一个txt文件的内容并将其写入到另一个txt文件2.Python读取一个未知编码的文件并将其设置为指定编码格式3.Python实现txt文件中字符串的替换 1.Python读取一个txt文件的内容并将其写入到另一个txt文件 # -*- encoding:gb2312 -*- import chardetdef read_…...

Redis 主从复制和哨兵模式

一、概念 主从复制,是指将一台 Redis 服务器的数据,复制到其他的 Redis 服务器。前者称为主节点(master/leader),后者称为从节点(slave/follower)。数据的复制是单向的,只能由主节点…...

【已解决】在 SpringBoot 中使用 CloseableHttpClient 调用接口时,接收参数中的中文变为“?“

问题描述 由于项目需要,需要在代码中使用POST请求去调用另一个服务的接口,即不通过前端,A 项目直接在方法中发起HTTP请求调用 B 项目的接口,当请求体中的参数有中文时,参数接收后中文会变为“?”。 具体原因是参数的…...

研磨设计模式day15策略模式

场景 问题描述 经常会有这样的需要,在不同的时候,要使用不同的计算方式。 解决方案 策略模式 定义: 解决思路:...

Densenet模型详解

模型介绍 DenseNet的主要思想是密集连接,它在卷积神经网络(CNN)中引入了密集块(Dense Block),在这些块中,每个层都与前面所有层直接连接。这种设计可以让信息更快速地传播,有助于解…...

华为eNSP模拟器中,路由器如何添加serial接口

在ensp模拟器中新建拓扑后,添加2个路由器。 在路由器图标上单击鼠标右键,选择设置选项。 在【视图】选项卡的【eNSP支持的接口卡】窗口查找serial接口卡。 选择2SA接口卡,将其拖动到路由器空置的卡槽位。 如上图所示,已经完成路由…...

Linux脚本- 执行当前文件下前500个.c文件,并将每个文件对应的执行结果重定向到同名的.ok文件中

需求:执行当前文件下前500个.c文件,并将每个文件对应的执行结果重定向到同名的.ok文件中 以下是一个用于实现该功能的 Bash 脚本。 #!/bin/bash# 计数器,用于限制处理的文件数量 counter0# 遍历当前目录下的所有 .c 文件 for c_file in *.c…...

高速公路自动驾驶汽车超车控制方法研究

目录 摘要 ............................................................................................................ I Abstract ...................................................................................................... II 目录 ...............…...

Java 多线程系列Ⅰ(创建线程+查看线程+Thread方法+线程状态)

多线程基础 一、创建线程的五种方法前置知识1、方法一:使用继承Thread类,重写run方法2、方法二:实现Runnable接口,重写run方法3、方法三:继承Thread,使用匿名内部类4、方法四:实现Runnable&…...

无入侵接口文档smart-doc

Smart-doc优点&#xff1a; 1.非侵入式生成接口文档 2.减少接口文档的手动更新麻烦&保证了接口文档和代码的一致 3.随时可生成最新的接口文档 4.保持团队代码风格一致:smart-doc支持javadoc&#xff0c;必须按照这个才能生成有注释的接口文档 最终效果 1.导入依赖 <pl…...

nacos配置超级管理员账户,只能mysql存储数据(或者其他数据库)

nacos本身是不允许授权超级管理员账号的&#xff0c;也就是角色名“ROLE_ADMIN”。作者在页面上试过了&#xff0c;不必再次尝试改的方式是直接改数据库里面的数据...

【前端自动化部署】,Devops,CI/CD

DevOps 提到Jenkins&#xff0c;想到的第一个概念就是 CI/CD 在这之前应该再了解一个概念。 DevOps Development 和 Operations 的组合&#xff0c;是一种方法论&#xff0c;并不特指某种技术或者工具。DevOps 是一种重视 Dev 开发人员和 Ops 运维人员之间沟通、协作的流程。…...

【C语言】探讨蕴藏在表达式求解中的因素

&#x1f6a9;纸上得来终觉浅&#xff0c; 绝知此事要躬行。 &#x1f31f;主页&#xff1a;June-Frost &#x1f680;专栏&#xff1a;C语言 &#x1f525;该篇将探讨 操作符 和 类型转换 对表达式求解的影响。 目录&#xff1a; 隐式类型转换算术转换操作符的属性❤️ 结语 隐…...

2023/8/31 - Be a wise person and live in the present

...

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…...

反向工程与模型迁移:打造未来商品详情API的可持续创新体系

在电商行业蓬勃发展的当下&#xff0c;商品详情API作为连接电商平台与开发者、商家及用户的关键纽带&#xff0c;其重要性日益凸显。传统商品详情API主要聚焦于商品基本信息&#xff08;如名称、价格、库存等&#xff09;的获取与展示&#xff0c;已难以满足市场对个性化、智能…...

黑马Mybatis

Mybatis 表现层&#xff1a;页面展示 业务层&#xff1a;逻辑处理 持久层&#xff1a;持久数据化保存 在这里插入图片描述 Mybatis快速入门 ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/6501c2109c4442118ceb6014725e48e4.png //logback.xml <?xml ver…...

【磁盘】每天掌握一个Linux命令 - iostat

目录 【磁盘】每天掌握一个Linux命令 - iostat工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景 注意事项 【磁盘】每天掌握一个Linux命令 - iostat 工具概述 iostat&#xff08;I/O Statistics&#xff09;是Linux系统下用于监视系统输入输出设备和CPU使…...

如何在看板中有效管理突发紧急任务

在看板中有效管理突发紧急任务需要&#xff1a;设立专门的紧急任务通道、重新调整任务优先级、保持适度的WIP&#xff08;Work-in-Progress&#xff09;弹性、优化任务处理流程、提高团队应对突发情况的敏捷性。其中&#xff0c;设立专门的紧急任务通道尤为重要&#xff0c;这能…...

ardupilot 开发环境eclipse 中import 缺少C++

目录 文章目录 目录摘要1.修复过程摘要 本节主要解决ardupilot 开发环境eclipse 中import 缺少C++,无法导入ardupilot代码,会引起查看不方便的问题。如下图所示 1.修复过程 0.安装ubuntu 软件中自带的eclipse 1.打开eclipse—Help—install new software 2.在 Work with中…...

NLP学习路线图(二十三):长短期记忆网络(LSTM)

在自然语言处理(NLP)领域,我们时刻面临着处理序列数据的核心挑战。无论是理解句子的结构、分析文本的情感,还是实现语言的翻译,都需要模型能够捕捉词语之间依时序产生的复杂依赖关系。传统的神经网络结构在处理这种序列依赖时显得力不从心,而循环神经网络(RNN) 曾被视为…...

html css js网页制作成品——HTML+CSS榴莲商城网页设计(4页)附源码

目录 一、&#x1f468;‍&#x1f393;网站题目 二、✍️网站描述 三、&#x1f4da;网站介绍 四、&#x1f310;网站效果 五、&#x1fa93; 代码实现 &#x1f9f1;HTML 六、&#x1f947; 如何让学习不再盲目 七、&#x1f381;更多干货 一、&#x1f468;‍&#x1f…...

HarmonyOS运动开发:如何用mpchart绘制运动配速图表

##鸿蒙核心技术##运动开发##Sensor Service Kit&#xff08;传感器服务&#xff09;# 前言 在运动类应用中&#xff0c;运动数据的可视化是提升用户体验的重要环节。通过直观的图表展示运动过程中的关键数据&#xff0c;如配速、距离、卡路里消耗等&#xff0c;用户可以更清晰…...

视频行为标注工具BehaviLabel(源码+使用介绍+Windows.Exe版本)

前言&#xff1a; 最近在做行为检测相关的模型&#xff0c;用的是时空图卷积网络&#xff08;STGCN&#xff09;&#xff0c;但原有kinetic-400数据集数据质量较低&#xff0c;需要进行细粒度的标注&#xff0c;同时粗略搜了下已有开源工具基本都集中于图像分割这块&#xff0c…...