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

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 总体概括至引结束,如有疑问,欢迎评论区留言。

相关文章:

RocketMQ 总体概括

目录 概述RocketMQ 领域模型MQ 解决的问题电商平台案例初步设计引入中间件设计 MQ 选型结束 概述 官网地址 RocketMQ 领域模型 官方领域模型概述 下面图,是在自己理解的基础上,对官方的模型图添加了一些。 Topic:主题,可以理解…...

使用qemu在arm上模拟x86并运行docker

背景 有一个x86的docker镜像,但是需要运行在aarch64(arm64)上,无奈只能用qemu模拟x86的架构,但是最终没有实现。 原因分析:可能是使用的server版本的ubuntu镜像,建议之后换用desktop版本的ubuntu18镜像(猜…...

IIS配置多域名跨域

搜索了一轮,自己实践发现iis中填多条Access-Control-Allow-Origin记录、逗号分隔、正则表达式这些是不行的。另外好像无论Ngxin还是Tomcat等都要rewrite之类的方法。由于仅仅是测试,所以暂时用*通配符算了。记录一下参考,要的时候再研究 CORS…...

el-form表单校验输入框值为0时 提示校验不通过

el-form表单校验输入框值为0时提示校验不通过 配置validator自定义校验方法 这里举例在结构代码里加入校验规则 <el-form-item:prop"num":rules"[{required: true,message: 请输入数量,trigger: change,},{validator,trigger: blur}]" ><el-inpu…...

Vue3后台管理-项目总结

后台管理 1. 动态路由2. 动态侧边栏菜单 持续更新中。。。 1. 动态路由 后台路由模型数据 &#xff08;如果后端不知道怎么转为 这种树结构的路由&#xff0c;可以参考 普通数组转树结构的数组&#xff09; const dynamicRoutes [{path: /,name: Layout,redirect: /home,comp…...

利用Pytorch预训练模型进行图像分类

Use Pre-trained models for Image Classification. # This post is rectified on the base of https://learnopencv.com/pytorch-for-beginners-image-classification-using-pre-trained-models/# And we have re-orginaized the code script.预训练模型(Pre-trained models)…...

MSF学习

之前的渗透测试中 其实很少用到 cs msf 但是在实际内网的时候 可以发现 msf cs 都是很好用的 所以现在我来学习一下 msf的使用方法 kali自带msf https://www.cnblogs.com/bmjoker/p/10051014.html 使用 msfconsole 启动即可 首先就是最正常的木马生成 所以这里其实只需…...

Mybatis与Spring结合深探——MapperFactoryBean的奥秘

文章目录 前言MapperFactoryBean的工作原理底层实现剖析MapperFactoryBean的checkDaoConfig()方法总结 MapperFactoryBean的getObject()方法 思考联想后续 系列相关相关文章究竟FactoryBean是什么&#xff1f;深入理解Spring的工厂神器超硬核解析Mybatis动态代理原理&#xff0…...

processon使用及流程图和泳道图的绘画(登录界面流程图,门诊流程图绘制门诊泳道图,住院泳道图,OA会议泳道图),Axure自定义元件

目录 一.processon图形的使用场景介绍 二.流程图绘画 三.泳道图的绘画 1.绘制门诊流程图绘制门诊泳道图 2. 绘制住院泳道图​编辑 3.绘制药库采购入库流程图 4.绘制OA会议泳道图 四.Axure自定义元件 1.Axure载入元件库 一.processon图形的使用场景介绍 二.流程图绘画 示例&…...

【虹科干货】关于JSON数据库

文章速览&#xff1a; 什么是JSON什么是JSON数据库JSON数据库的显著优势关于JSON数据库的Q&A 如何理解JSON数据库&#xff1f;作为NoSQL数据库的一种类型&#xff0c;JSON数据库有哪些优势呢&#xff1f;JSON数据库如何运作&#xff0c;它为应用程序开发者带来了哪些价值呢…...

区块链的可拓展性研究【03】扩容整理

为什么扩容&#xff1a;在layer1上&#xff0c;交易速度慢&#xff0c;燃料价格高 扩容的目的&#xff1a;在保证去中心化和安全性的前提下&#xff0c;提升交易速度&#xff0c;更快确定交易&#xff0c;提升交易吞吐量&#xff08;提升每秒交易量&#xff09; 目前方案有&…...

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

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

MFC 加载本地文件设置图标

基于单文件/多文件版 1、在CMainFrame中设置 int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) {//...........// 从本地文件加载图标HICON hIcon (HICON)::LoadImage(NULL, L"./vip.ico", IMAGE_ICON, 0, 0, LR_LOADFROMFILE);if (hIcon){ // 设置窗口图…...

飞天使-linux操作的一些技巧与知识点6-ansible结合jinja2使用,可规范化进行自动化管控

文章目录 在议playbook虚拟环境中安装ansibleplaybook 结合变量的一些演示普通的vars_files 变量&#xff0c;在同级目录创建目录使用host_vars 定义变量group_vars定义变量根据不同系统操作不同版本传递多个外置变量举例几个不同的示例factswhenloophandlers 与 notifytags 任…...

ROS2 Control分析讲解

ROS2 Control 文章目录 前言简述组成安装 框架Controller ManagerResource ManagerControllersUser Interfaces Hardware ComponentsURDF中的硬件描述机器人运行框架 总结 前言 ros2_control是一个使用&#xff08;ROS 2&#xff09;进行机器人&#xff08;实时&#xff09;控…...

Java TCP(一对一)聊天简易版

客户端 import java.io.*; import java.net.Socket; import java.util.Date; import javax.swing.*;public class MyClient {private JFrame jf;private JButton jBsend;private JTextArea jTAcontent;private JTextField jText;private JLabel JLcontent;private Date data;p…...

2.4 C语言之运算符

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

做题笔记:SQL Sever 方式做牛客SQL的题目--SQL157

----SQL157 平均播放进度大于60%的视频类别 计算各类视频的平均播放进度&#xff0c;将进度大于60%的类别输出。 注&#xff1a; 播放进度播放时长视频时长*100%&#xff0c;当播放时长大于视频时长时&#xff0c;播放进度均记为100%。 结果保留两位小数&#xff0c;并按播放进…...

微信小程序map视野发生改变时切换定位点

<!--地图--> <view><map id"myMap" style"width: 100%; height: 300px;" latitude"{{latitude}}" longitude"{{longitude}}"scale"{{scale}}" markers"{{markers}}" controls"{{controls}}&q…...

javaweb搭配ajax和json

ajax一般用来前端界面与后端界面交互使用。数据格式一般使用json&#xff0c;优点是便于对象与字符串的转化。 1.不适用json对象封装。 jsp: <script>$.ajax({url: "/LoginServlet",data: {"name":name, "pwd":password},dataType: &qu…...

告别时间混乱:一份超全的Hive日期函数使用手册与常见错误排查

告别时间混乱&#xff1a;一份超全的Hive日期函数使用手册与常见错误排查 在数据开发领域&#xff0c;时间数据处理一直是高频且易错的环节。无论是日志分析、用户行为追踪还是财务报表生成&#xff0c;准确的时间计算都是确保数据质量的基础。Hive作为大数据生态中广泛使用的数…...

数据分析师能力展示:从项目构建到报告呈现的完整指南

1. 项目概述&#xff1a;一个数据分析师的能力展示平台最近在GitHub上看到一个挺有意思的项目&#xff0c;叫“dataanalyst-showcase”。光看名字&#xff0c;你可能会觉得这又是一个数据科学项目合集&#xff0c;但点进去仔细研究后&#xff0c;我发现它的定位非常精准——它不…...

Go语言SDK开发实战:为AI编程助手Cursor构建高效API客户端

1. 项目概述&#xff1a;一个为AI编程助手Cursor定制的Go语言SDK如果你和我一样&#xff0c;日常重度依赖Cursor这类AI编程助手来提升开发效率&#xff0c;同时又是个Go语言的忠实拥趸&#xff0c;那你肯定遇到过这样的场景&#xff1a;想用Go写个脚本&#xff0c;自动化处理一…...

【限时解密】Midjourney未公开的Tea印相冷启动协议:如何绕过默认sampler干扰,直触胶片模拟内核(仅剩37位开发者掌握)

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;Midjourney Tea印相冷启动协议的起源与本质 Midjourney Tea印相冷启动协议&#xff08;Tea-Init Protocol&#xff09;并非官方标准&#xff0c;而是由东亚AI艺术协作社区在2023年自发演化出的一套轻量…...

从“客户匿名”到“可验证”:技术服务案例的工程化写法

在撰写技术服务案例时&#xff0c;我们经常面临一个挑战&#xff1a;客户要求匿名&#xff0c;但案例又需要让潜在客户相信效果。如何平衡&#xff1f;结合文澜天下科技在AI搜索优化项目中的实践&#xff0c;分享一种“可验证”的案例写法。一、定位具体行业和场景 不写“某教育…...

别再只认识空气开关了!从家用配电箱到工厂配电柜,一文搞懂断路器的选型与接线(附实物图)

从家庭配电到工业电力&#xff1a;断路器的实战选型与安全接线指南 推开配电箱的门板&#xff0c;那些排列整齐的断路器不仅仅是电路的通断开关&#xff0c;更是守护用电安全的第一道防线。无论是家庭装修中的线路规划&#xff0c;还是工厂车间的电力分配&#xff0c;选择合适的…...

Motrix WebExtension:浏览器下载加速的终极解决方案

Motrix WebExtension&#xff1a;浏览器下载加速的终极解决方案 【免费下载链接】motrix-webextension A browser extension for the Motrix Download Manager and its forks 项目地址: https://gitcode.com/gh_mirrors/mo/motrix-webextension 在当今数字时代&#xff…...

当你的Android手机频繁闪退时,系统在后台悄悄做了什么?—— 深入Rescue Party机制

当你的Android手机频繁闪退时&#xff0c;系统在后台悄悄做了什么&#xff1f;—— 深入Rescue Party机制 每次点击应用图标却遭遇闪退时&#xff0c;用户看到的只是瞬间消失的界面&#xff0c;而Android系统内部正上演着一场精密的多线程救援行动。这种看似简单的崩溃背后&…...

ITK-SNAP医学图像分割:从临床需求到精准分析的完整指南

ITK-SNAP医学图像分割&#xff1a;从临床需求到精准分析的完整指南 【免费下载链接】itksnap ITK-SNAP medical image segmentation tool 项目地址: https://gitcode.com/gh_mirrors/it/itksnap 面对复杂的医学影像数据&#xff0c;你是否曾为如何准确提取关键解剖结构而…...

三量子比特控制旋转门:挑战与创新协议设计

1. 三量子比特控制旋转门的核心挑战在量子计算领域&#xff0c;多量子比特门是实现复杂量子算法的关键构建模块。其中&#xff0c;三量子比特控制旋转门(C2Ry)作为一种基本的多量子比特操作&#xff0c;能够根据两个控制量子比特的状态对目标量子比特执行条件旋转&#xff0c;在…...