RocketMQ 总体概括

目录

  • 概述
  • RocketMQ 领域模型
  • MQ 解决的问题
    • 电商平台案例
      • 初步设计
      • 引入中间件设计
  • MQ 选型
  • 结束

概述

官网地址

RocketMQ 领域模型

官方领域模型概述

下面图,是在自己理解的基础上,对官方的模型图添加了一些。

在这里插入图片描述

  • Topic:主题,可以理解为类别、分类的概念。
  • MessageQueue:消息队列,存储数据的一个容器(队列索引数据),默认每个 Topic下有4个队列被分配出来存储消息。
  • Message:消息,真正携带信息的载体概念。
  • Producer:生产者,负责发送消息。
  • Consumer:消费者,负责消费消息。
  • ConsumerGroup:众多消费都构成的整体或构成的集群,称之为消费者组。
  • Subscription:订阅关系,消费者得知道自己需要消费哪个 Topic 下的哪个队列的数。

MQ 解决的问题

对于 MQ 解决的问题做总结。

  • 异步:侧重的处理流程,流程上将以前的一些同步逻辑,改造成为异步的逻辑流程。
  • 解耦:侧重功能设计,在做一些业务架构分析的时候,可以有力度有重点的区分主干流程、分支流程。
  • 削峰限流:侧重在数量级的问题,相比于未接入 MQ 时能再次抗上几倍甚至几十倍的流量。
  • 延迟调用(准实时、一定延时):侧重定制化诉求,在 db 与 MQ 之间做一个抉择(用户下单,半小时未支付则自动取消订单,不是定时任务,而是触发,精确操作)。

电商平台案例

初步设计

通过电商平台用户注册送积分、送优惠券这个场景来理解异步解耦合。如果不使用消息中间件,电商平台送积分的实现也许是下图这个样子:
在这里插入图片描述

  • 用户在网站前端注册页面填写相关信息,然后调用账号中心服务,注册账号。
  • 账户中心首先执行用户注册逻辑处理(例如判断用户是否已注册、是否符合注册条件等),然后写入到数据库。
  • 注册成功后,需要调用积分中心(赠送积分接口)给用户送积分。
  • 送完积分后,再调用优惠券相关接口,为用户赠送优惠券。
  • 成功送完积分、优惠券后,向用户返回“注册成功”。

由上图可知,这个 设计 有一个比较严重的问题,那就是可扩展性低。
如,如果调整活动策略,在发送积分的同时,还需要发送额外的大礼包,就不得不修改用户注册流程,并重新部署用户注册模块。

从功能来看,需求的变更集中在活动相关的内容。用户注册本身的逻辑并未发生变化,但由于用户注册逻辑与活动模块存在耦合,两个模块必须一起调整和发布。

另外,调用积分、优惠两个功能,也会增加用户注册流程时间变长,在高并发场景下,用户注册易变成系统瓶颈。

引入中间件设计

在这里插入图片描述
将注册逻辑与积分、优惠业务分离,这样,注册逻辑就不会因为积分、优惠业务的变化,而修改,即使添加了新的大礼包,优惠、积分的业务,后续也不再变化,做到了真正对新增开放,对修改关闭。

MQ 选型

一般从业务出发,选择合适的 MQ ,如果是从普适性出发,可根据功能、单机吞吐、水平扩展上进行选择,还可以根据公司或团队的技术栈来选择 MQ ,如果公司语言以 Erlang ,那可以选择 RabbitMQ ,性能可以通过更多的集群来解决。如果是以 Java 为主,建议使用 Kafka,或者 RocketMQ。两者都是性能优秀的中间件,在这两者之间选择时,可以更多关注功能特性。

特别是 RocketMQ 提供了消息重试、消息过滤、消息轨迹、消息检索等功能特性,特别是 RocketMQ 的消息检索功能,因此很适合核心业务场景。而 Kafka 更加擅长于日志、大数据计算、流式计算等场景。

如下是常见的 MQ 做的相关对比。

维度对比项KafkaRocketMQRabbitMQ
功能维度延迟消息不支持支持支持
功能维度优先级队列不支持不支持支持
功能维度事务消息支持支持支持
功能维度消息重试不支持支持不支持
功能维度消息堆积能力弱(性能会受影响)
功能维度消息回溯支持支持不支持
功能维度消息过滤不支持支持不支持
功能维度消息轨迹不支持支持支持(需要插件)
功能维度多语言支持多语言客户端支持多语言客户端支持多语言客户端
功能维度ACL支持支持支持
性能维度单机吞吐量百万级十万级万级
性能维度消息发送时延ms级us级us级
性能维度水平伸缩能力支持(伴随大量数据复制)支持(轻量级)支持
其它维度技术栈Java/ScalaJavaErlang

结束

RocketMQ 总体概括至引结束,如有疑问,欢迎评论区留言。

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

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

相关文章

打家劫舍Ⅱ java

题目描述 你是一个专业的小偷,计划偷窃沿街的房屋,每间房内都藏有一定的现金。这个地方所有的房屋都 围成一圈 ,这意味着第一个房屋和最后一个房屋是紧挨着的。同时,相邻的房屋装有相互连通的防盗系统,如果两间相邻的…

深入解析MySQL中内连接、外连接的区别及实践应用

​嗨,大家好,欢迎来到程序猿漠然公众号,我是漠然。在数据库查询中,连接是一种常用的操作,用于从两个或多个表中获取数据。本文将详细介绍MySQL中的内连接、外连接的概念、区别以及实践应用,帮助大家更好地理…

Java网络编程——基于UDP的数据报和套接字

java.net.ServerSocket与java.net.Socket建立在TCP的基础上。TCP是网络传输层的一种可靠的数据传输协议。如果数据在传输途中被丢失或损坏,那么TCP会保证再次发送数据;如果数据到达接收方的顺序被打乱,那么TCP会在接收方重新恢复数据的正确顺…

vscode报错Pylance client: couldn‘t create connection to server.

问题描述: 一打开vscode,右下角就弹报错,Pylance client: couldn’t create connection to server.,让我打开output,打开后似乎是在说连不上server 因为连不上server,所以我的python代码没法解析&#xff0…

2.4 C语言之运算符

2.4 C语言之运算符 一、算术运算符二、关系运算符三、逻辑运算符四、自增自减运算符五、按位运算符六、赋值运算符七、条件表达式八、运算符优先级与求值次序 一、算术运算符 二元算术运算符包括:(加)、-(减)、*(乘)、/(除)、%(取模) 整数除法会截断结果中的小数部…

扬声器(喇叭)

扬声器(喇叭) 电子元器件百科 文章目录 扬声器(喇叭)前言一、扬声器(喇叭)是什么二、扬声器(喇叭)的类别三、扬声器(喇叭)的应用场景四、扬声器(喇叭)的作用原理总结前言 扬声器广泛应用于音响系统、公共广播系统、汽车音响、电视、电脑和移动设备等各种电子设备…

Linux基本开发工具

编译器和自动化构建工具 一、编译器——gcc、g1. 安装 gcc/g2. 使用3. 链接库4. 拓展命令:od/file/ldd/readelf 二、自动化构建项目——make、makefile1. 介绍2. 使用例子touch——change file timestampsstat——display file or file system status修改时间 .PHON…

Qt 文字描边(基础篇)

项目中有时需要文字描边的功能 1.基础的绘制文字 使用drawtext处理 void MainWindow::paintEvent(QPaintEvent *event) {QPainter painter(this);painter.setRenderHint(QPainter::Antialiasing, true);painter.setRenderHint(QPainter::SmoothPixmapTransform, true);painte…

ceph的osd盘删除操作和iscsi扩展

ceph的osd盘删除操作 拓展:osd磁盘的删除(这里以删除node1上的osd.0磁盘为例) 1, 查看osd磁盘状态 [rootnode1 ceph]# ceph osd tree ID CLASS WEIGHT TYPE NAME STATUS REWEIGHT PRI-AFF -1 0.00298 root default -3 0.00099 host node10 hdd 0.00…

【Vins轨迹】pose_graph位姿图加载EVO精度评定

1. Vins的位姿图加载功能 如果想要对slam运行后的位姿轨迹进行评定,需要将数据保存到output文件夹中。 其中pose_graph.txt含有的信息:关键帧id、时间戳、vio的xyz、优化后的xyz、vio的四元数、优化后的四元数、回环到的关键帧id、回环信息&#xff08…

【Py/Java/C++三种语言OD2023C卷真题】20天拿下华为OD笔试【DP】2023C-分班【欧弟算法】全网注释最详细分类最全的华为OD真题题解

文章目录 题目描述与示例题目描述输入描述输出描述示例一输入输出 示例二输入输出 解题思路代码PythonJavaC时空复杂度 华为OD算法/大厂面试高频题算法练习冲刺训练 题目描述与示例 题目描述 幼儿园两个班的小朋友在排队时混在了一起,每位小朋友都知道自己是否与前…

【十】python复合模式

10.1 复合模式简介 在前面的栏目中我们了解了各种设计模式。正如我们所看到的,设计模式可分为三大类:结构型、创建型和行为型设计模式。同时,我们还给出了每种类型的相应示例。然而,在软件实现中,模式并是不孤立地工作的。对于所…

HPM5300系列--第一篇 命令行开发调试环境搭建

一、目的 在之前的博客中《HPM6750系列--第二篇 搭建Ubuntu开发环境》、 《HPM6750系列--第三篇 搭建MACOS编译和调试环境》我们介绍了HPM6750evkmini开发环境的搭建过程,由于HPM5300系列共用一套hpm-sdk,故HPM5300的开发调试环境的搭建过程基本和之前的…

golang学习笔记——互斥锁sync.Mutex、计数器sync.WaitGroup、读写锁sync.RWMutex

文章目录 互斥锁: sync.Mutexsync.WaitGroup 计数器例子func (*WaitGroup) Addfunc (*WaitGroup) Donefunc (*WaitGroup) Wait 读写互斥锁参考资料 临界区总是需要通过同步机制进行保护的,否则就会产生竞态条件,导致数据不一致。 互斥锁&…

智能故障诊断期刊推荐【中文期刊】

控制与决策 http://kzyjc.alljournals.cn/kzyjc/home 兵工学报 http://www.co-journal.com/CN/1000-1093/home.shtml 计算机集成制造系统 http://jsjjc.soripan.net/ 机械工程学报 http://www.cjmenet.com.cn/CN/0577-6686/home.shtml 太阳能学报 https://www.tynxb.org.c…

Visual Studio Code中的任务配置文件tasks.json中的可选任务组tasks详解

☞ ░ 前往老猿Python博客 ░ https://blog.csdn.net/LaoYuanPython 一、引言 vscode是支持通过配置可以实现类似Visual C等IDE开发工具使用菜单和快捷键直接进行程序编译构建的,这样构建的任务可以结合后续的调试配置进行IDE环境的程序调试,不过在之前…

12. IO

1.File类 • File 类代表与平台无关的文件和目录。 • File 能新建、删除、重命名文件和目录,但 File 不能访问文件内容本身。如果需要访问文件内容本身,则需要使用输入/输出流。 1).File的常用方法 在这里插入图片描述 2).遍历给定目录所有文件 …

Android源码下载流程

1.使用repo方式: https://github.com/jeanboydev/Android-ReadTheFuckingSourceCode/blob/master/article/android/framework/Android-Windows%E7%8E%AF%E5%A2%83%E4%B8%8B%E8%BD%BD%E6%BA%90%E7%A0%81.md 2.使用git方式: Windows 环境下载 Android 源…

QT之QMatrix

QT之QMatrix 成员函数介绍使用注意函数的使用 成员函数介绍 reset():将矩阵重置为单位矩阵(无变换)。 translate():执行平移变换。例如,translate(qreal dx, qreal dy)将图形沿x轴和y轴方向分别平移dx和dy个单位。 sc…

MySQL增删改查

查询数据 MySQL 数据库使用 SQL SELECT 语句来查询数据。以下为在 MySQL 数据库中查询数据通用的 SELECT 语法: SELECT column_name,column_name FROM table_name [WHERE Clause] [LIMIT N][ OFFSET M] 查询语句中你可以使用一个或者多个表,表之间使用…