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网络编程——基于UDP的数据报和套接字

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

扬声器(喇叭)

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

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…

【十】python复合模式

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

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

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

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

控制与决策 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).遍历给定目录所有文件 …

MySQL增删改查

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

联想笔记本如何安装Vmware ESXi

环境: Vmware ESXi 8.0 Vmware ESXi 6.7 联想E14笔记本 问题描述: 联想笔记本如何安装Vmware ESXi 解决方案: 1.官网下载镜像文件 https://customerconnect.vmware.com/en/downloads/search?queryesxi%208 下载 2.没有账户注册一个 …

什么时候使用匿名类,匿名类解决了什么问题?为什么需要匿名类 ?

匿名类通常在以下场景下使用: 一次性使用: 当你需要创建一个类的实例,但该类只在一个地方使用,而不打算在其他地方重复使用时,可以考虑使用匿名类。 简化代码: 当创建一个小型的、一次性的类会让代码更简洁…

浅析特征增强个性化在CTR预估中的经典方法和效果对比

在CTR预估中,主流都采用特征embeddingMLP的方式,其中特征非常关键。然而对于相同的特征,在不同的样本中,表征是相同的,这种方式输入到下游模型,会限制模型的表达能力。为了解决这个问题,CTR预估…

【每日一题】用邮票贴满网格图

文章目录 Tag题目来源题目解读解题思路方法一:二维前缀和二维差分 写在最后 Tag 【二维前缀和】【二维差分】【矩阵】【2023-12-14】 题目来源 2132. 用邮票贴满网格图 题目解读 在 01 矩阵中,判断是否可以用给定尺寸的邮票将所有 0 位置都覆盖住&…

智能优化算法应用:基于黄金正弦算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用:基于黄金正弦算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用:基于黄金正弦算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.黄金正弦算法4.实验参数设定5.算法结果6.…

GeoTrust OV证书

当谈到网站安全性和可信度时,GeoTrust OV证书是一个备受推崇的选择。作为一家备受尊敬的数字证书颁发机构,GeoTrust以其卓越的品牌声誉和高质量的产品而闻名于世。GeoTrust OV证书提供了一系列的安全功能,同时还具有出色的性价比,…

系统级基础信号知识【Linux】

目录 一,什么是信号 进程面对信号常见的三种反应概述 二,产生信号 1.终端按键产生信号 signal 2. 进程异常产生信号 核心转储 3. 系统调用函数发送信号 kill raise abort 小结: 4. 由软件条件产生 alarm 5. 硬件异常产生信号…

WEB服务器介绍

Web服务器是指驻留于因特网上某种类型计算机的程序。当Web浏览器连到服务器上并请求文件时,服务器将处理该请求并将文件发送到该浏览器上,附带的信息会告诉浏览器如何查看该文件,即文WEB服务器件类型。服务器使用HTTP进行信息交流&#xff0c…