MQ - 消息系统

消息系统

1、消息系统的演变

在大型系统中,会需要和很多子系统做交互,也需要消息传递,在诸如此类系统中,你会找到源系统(消息发送方)和 目的系统(消息接收方)。为了在这样的消息系统中传输数据,你需要有合适的数据管道。如下:

在这里插入图片描述
这种数据的交互看起来就很混乱,如果我们使用消息传递系统,那么系统就会变得更加简单和整洁。如下:
在这里插入图片描述

2、为什么要消息系统

2.1. 解耦合

2.2 异步处理 例如电商平台,秒杀活动。一般流程会分为:1: 风险控制 、2: 库存锁定 、3: 生成订单 、4: 短信通知 、5: 更新数据

2.3 通过消息系统将秒杀活动业务拆分开,将不急需处理的业务放在后面慢慢处理;流程改为:1: 风险控制 、2: 库存锁定 、3: 消息系统 、4: 生成订单 、5: 短信通知 、6: 更新数据

2.4 流量的控制 :1. 网关在接受到请求后,就把请求放入到消息队列里面 2.后端的服务从消息队列里面获取到请求,完成后续的秒杀处理流程。然后再给用户返回结果。优点:控制了流量 缺点:会让流程变慢

3、消息队列的两种模式

3.1、点对点模式
点对点模式下包括三个角色:消息队列、发送者 (生产者)、接收者(消费者)
消息发送者生产消息发送到queue中,然后消息接收者从queue中取出并且消费消息。消息被消费以后,queue中不再有存储,所以消息接收者不可能消费到已经被消费的消息。
在这里插入图片描述

点对点模式特点:
每个消息只有一个接收者(Consumer)(即一旦被消费,消息就不再在消息队列中);
发送者和接收者间没有依赖性,发送者发送消息之后,不管有没有接收者在运行,都不会影响到发送者下次发送消息;
接收者在成功接收消息之后需向队列应答成功,以便消息队列删除当前接收的消息;

3.2、发布/订阅模式
发布/订阅模式下包括三个角色:角色主题(Topic)、发布者(Publisher)、订阅者(Subscriber)
在这里插入图片描述

发布者将消息发送到Topic,系统将这些消息传递给多个订阅者。
发布/订阅模式特点:

每个消息可以有多个订阅者;
发布者和订阅者之间有时间上的依赖性。针对某个主题(Topic)的订阅者,它必须创建一个订阅者之后,才能消费发布者的消息。
为了消费消息,订阅者需要提前订阅该角色主题,并保持在线运行;

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

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

相关文章

了解ThreadLocal的原理吗

程序员的公众号:源1024,获取更多资料,无加密无套路! 最近整理了一份大厂面试资料《史上最全大厂面试题》,Springboot、微服务、算法、数据结构、Zookeeper、Mybatis、Dubbo、linux、Kafka、Elasticsearch、数据库等等 …

YOLOv5改进 | 添加ECA注意力机制 + 更换主干网络之ShuffleNetV2

前言:Hello大家好,我是小哥谈。本文给大家介绍一种轻量化部署改进方式,即在主干网络中添加ECA注意力机制和更换主干网络之ShuffleNetV2,希望大家学习之后,能够彻底理解其改进流程及方法~!🌈 目…

解读Java虚拟机垃圾回收器:探究经典算法背后的奥秘

目录 一、GC分类与性能指标 (一)垃圾回收器分类 (二)性能指标 (三)不可能三角 二、不同的垃圾回收器概述 三、Serial回收器:串行回收 四、ParNew回收器:并行回收 五、Parall…

untiy webgl常见问题与操作

文章目录 1 untiy和网页相互通信2 打开新页面(同标签页和新标签页)3 获取网页的URL4 解析Url内的参数5 后处理与色彩空间问题 1 untiy和网页相互通信 看这个文章 2 打开新页面(同标签页和新标签页) 先看本文untiy和网页相互通信…

WEB渗透—反序列化(八)

Web渗透—反序列化 课程学习分享(课程非本人制作,仅提供学习分享) 靶场下载地址:GitHub - mcc0624/php_ser_Class: php反序列化靶场课程,基于课程制作的靶场 课程地址:PHP反序列化漏洞学习_哔哩哔_…

智慧垃圾分拣站:科技改变城市环境,创造更美好的未来

随着城市化进程的不断加快,垃圾处理问题日益凸显。为了更好地解决垃圾分类问题,越来越多的城市开始推广智慧垃圾分拣站,利用创新科技实现高效垃圾分类处理。 山海鲸使用三维建模技术,建立了一个智慧垃圾分拣站数字孪生模型&#x…

《数据结构、算法与应用C++语言描述》-优先级队列-大根堆的C++实现

优先级队列 完整可编译运行代码见:Github::Data-Structures-Algorithms-and-Applications/_25Priority queue 定义 优先级队列(priority queue)是0个或多个元素的集合,每个元素都有一个优先权或值,对优先级队列执行…

53.redis分布式缓存

目录 一、单机安装Redis。 二、Redis主从集群。 2.1.集群结构 2.2.准备实例和配置 2.3.启动 2.4.开启主从关系 2.5.测试 三、搭建哨兵集群。 3.1.集群结构 3.2.准备实例和配置 3.3.启动 3.4.测试 四、搭建分片集群。 4.1.集群结构 4.2.准备实例和配置 4.3.启动…

【附代码】Python函数性能测试(perfplot)

文章目录 相关文献测试电脑配置展开元素是list的list在numpy数组上映射函数的最有效方法数组numpy中唯一值的最有效频率计数方法反转numpy数组的最有效方法如何向 numpy 数组添加额外的列将 numpy 矩阵初始化为零或一以外的值 作者:小猪快跑 基础数学&计算数学&…

基于helm的方式在k8s集群中部署gitlab - 备份恢复(二)

接上一篇 基于helm的方式在k8s集群中部署gitlab - 部署(一),本篇重点介绍在k8s集群中备份gitlab的数据,并在虚拟机上部署相同版本的gitlab,然后将备份的数据进行还原恢复 文章目录 1. 备份2. 恢复到虚拟机上的gitlab2.…

第九节HarmonyOS 常用基础组件4-Button

一、Button Button组件主要用来响应点击操作,可以包含子组件。 示例代码: Entry Component struct Index {build() {Row() {Column() {Button(确定, { type: ButtonType.Capsule, stateEffect: true }).width(90%).height(40).fontSize(16).fontWeigh…

软件工程精品课程教学网站的设计与实现

系统功能需求分析 本系统要求采用Browser/Server模式设计开发,可以作为一般高等院校的网络学堂;可以为教师的辅助教学或者网络教学提供一个完善的教学网站;学生可以利用本教学网站来完成一些课程的学习任务。 2.2.1 功能划分 《软件工程》教学…

解决top-k问题--堆排序

目录 TOP-K问题 堆排序 考虑以下情况: 1.在n个数里面找最大的一个数 2.在n个数里面找最大的两个数 3.在n个数中求前k大的数 为什么不用大根堆呢? 代码 时间复杂度 TOP-K问题 即求数据结合中前K个最大的元素或者最小的元素,一般情况下数…

Java基本数据类型详解

✨个人主页:全栈程序猿的CSDN博客 💨系列专栏:Java从入门到精通 ✌座右铭:编码如诗,Bug似流星,持续追求优雅的代码,解决问题如同星辰般自如 Java是一种强类型语言,数据类型在程序中起…

iOS NSDate的常用API

目录 一、创建日期 1.获取当前时间 2.当前时间指定秒数之后/前的时间 3.指定日期之后/后的时间 4.2001年之后/前指定秒数的时间 5.1970年之后/后指定秒数的时间 二、初始化日期 1.init 2.时间间指定秒数的时间 3.指定时间指定秒数之前/后的时间 4.2001年指定秒数之后…

QML中常见布局方法

目录 引言常见方法锚定(anchors)定位器Row、ColumnGridFlow 布局管理器RowLayout、ColumnLayoutGridLayoutStackLayout 总结 引言 UI界面由诸多元素构成,如Label、Button、Input等等,各种元素需要按照一定规律进行排布才能提高界…

Spring MVC学习随笔-控制器(Controller)开发详解:控制器跳转与作用域(二)视图模板、静态资源访问

学习视频:孙哥说SpringMVC:结合Thymeleaf,重塑你的MVC世界!|前所未有的Web开发探索之旅 衔接上文Spring MVC学习随笔-控制器(Controller)开发详解:控制器跳转与作用域(一) SpingMVC中…

创建JDK8版本的SpringBoot项目的方法

目录 一.通过阿里云下载 二.通过IDEA创建 1.下载安装JDK17 2.创建SpringBoot 3.X的项目 3.把JDK17改成JDK8 截止到2023.11.24,SpringBoot不再支持3.0X之前的版本,3.0X之后的版本所对应的JDK版本为JDK17,下面介绍如何在idea上继续使用JDK…

python动态圣诞下雪图

运行图片 代码 import pygame import random# 初始化Pygame pygame.init()# 创建窗口 width, height 800, 600 screen pygame.display.set_mode((width, height)) pygame.display.set_caption(Christmas Tree)# 定义颜色 GREEN (34, 139, 34) RED (255, 0, 0) WHITE (255…

彻底删除VsCode配置和安装过的插件与缓存

前言 当你准备对 Visual Studio Code(VSCode)进行重新安装时,可能遇到一个常见问题:重新安装后,新的安装似乎仍然保留了旧的配置信息,这可能会导致一些麻烦。这种情况通常是由于卸载不彻底所致&#xff0c…