RocketMQ快速入门_2. rocketmq 的应用场景、与其他mq的差异

0. 引言

之前我们讲解过rabbitMQ,本期我们将进入吞吐量更加强大的rocketMQ的学习。

1. 基础概念

如果你是刚接触MQ的同学,还不清楚消息队列的基础概念的,可以参考我之前这篇文章:

https://wu55555.blog.csdn.net/article/details/124678795

2. rocketMQ的应用场景

我们在之前的文章中已经引入了MQ的三种场景:异步调用、流量削峰、服务解耦

而除了这几个作用外,rocketmq支持的几大特性还可以处理以下几种业务场景:

  • 顺序消费

所谓顺序消费,就是希望触发的事件按照触发的顺序依次执行,而不要产生混乱。这里大家可能有疑惑,我们正常执行代码不就是顺序消费的吗? 为什么要单独说明,当然是因为执行的事件非常多,我们需要借助MQ缓冲大量消息的特性作为前提,然后又要保证消息是顺序消费执行的,这样才能保证我们后续的业务不会产生混乱。而这一场景就可以依赖rocketmq完成,后续我们会详细讲解实现步骤。

  • 分布式事务

熟悉mysql的同学应该清楚事务执行,但分布式事务的操作,一可以依赖一些分布式组件,如seata来实现,但某些场景下,比如还是上述说的,我们有大量事件堆积的情况下,需要MQ来缓冲,而我们有需要满足事务,这种所谓的事务是指什么呢? 就是在这条消息消费并执行完后续的处理事件之前,如果发生了报错,可以让这条消息的消费回退,下次可以再次消费,以此称为分布式事务消息,这类场景也不少见,而rocketmq独有的事务消息可以很好的帮助我们解决该问题。

  • 延迟操作

延迟操作在很多业务中都有需求,比如最常见的30分钟未支付自动关闭订单,定时重发等等,这一类的需求就需要MQ支持延迟消息的特性,而rocketmq的延迟消息虽然不如rabbitmq那样支持自定义的延迟时间,但是预设的16级延迟时间档位也足够我们应付绝大部分业务场景

  • 定时消息

定时消息实际上是延迟消息的一种变种,可以用定时任务完成,如定时推送订阅消息等,也可以借助延迟消息的特性来完成此类场景

3. rocketMQ与其他MQ的差异

3.1 主要差异

首先引入advanced-java项目中对比的几款常用MQ

image-20240308151127243

其中activeMQ实际已经很少使用,逐渐在退出研发者的视野。重点分析下rabbitMQ、rocektMQ、kafka的差异

rabbitmq相对出现的周期更长,功能性上更加完善,支持很多的拓展插件,如果你的项目对于吞吐量没有那么高的要求,只是需要个万级的MQ来做一些解耦、缓冲等,那么推荐rabbitmq。

但如果考虑后续要增加业务量,或者有不和预期的流量激增,那么更加推荐rocketmq,且因为是阿里开源的,文档性上相对更加友好,代码习惯更加符合国人习惯。但在大批量数据下可能有丢数据的风险,需要经过细致的调优。

kafka主要出现在大数据行业场景,同时像ELK之类的海量日志数据处理也会出现kafka的应用之地,同样有丢消息的诟病,优点是比rocketmq支持更加庞大的吞吐量。

3.2 架构差异

我们之前一起学习过rabbitmq,大家会了解到其中有路由的概念,相对来说rabbitmq的架构是有交换机来做一层分发的

image-20240308153604366

而在rocketmq中就没有交换机的分发了,通过topic来划分不同的队列,消费者通过订阅topic来接收消息,同时消费者、生产者都可以区分不同的群组

image-20240308155455406

相对kafka的架构就更加复杂,通过zookeeper来管理集群,采用broker服务存储消息,与rocketmq相同的是,也有主题topic的概念,消费者也通过订阅主题来接收相关的消息。不同的是kafka中有分区partition,一个topic会被切分为多个分割成多个较小的、有序的数据单元,每个数据单元就是一个partition。相对来说提高了kafka的并发能力,并且会创建分区副本存储到不同的broker上,以此提高可用性。

image-20240308155316750

4. 总结

从上文可以看到rocketmq中实际上是有namesrv , broker两个组件的,除此之外rocketmq还有一个管理端,而这三个组件之前的关系是什么,如何协同合作的? 我们将在下一节讲解。

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

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

相关文章

Java 学习和实践笔记(31):封装(encapsulation)

面向对象的三大特点:继承、封装、多态。前面学了继承,现在讲封装。 封装encapsulation一词来自于capsule,胶囊,小密器,密闭的空间。 封装的理念:高内聚,低耦合。 高内聚就是类的内部数据操作…

TCP包头、TCP为什么安全可靠、UDP和TCP的区别、http协议

我要成为嵌入式高手之3月8日Linux高编第十八天!! __________________________________________________ 学习笔记 TPC包头 1、序号 发送端发送数据包的编号 2、确认号 已经确认接收到的数据的编号,只有当ACK为1时,该位才有用 …

单例模式及线程安全的实践

🌟 欢迎来到 我的博客! 🌈 💡 探索未知, 分享知识 !💫 本文目录 引言基本的单例模式长啥样?怎样才能线程安全?**懒汉模式** ( 双 重 检 查 ) 🎉总结🎉 引言 单例模式是个…

运维知识点-Tomcat

Tomcat tomcat日志告警 tomcat文件包含读取漏洞Tomcat ### 远程代码执行(7.0.0-7.0.81) 开启PUT,访问127.0.0.1:8080改PUT,创建x.jsp,写入shellwar后文件部署,登入特定后台,上传包含…

寻找两个正序数组的中位数[困难]

优质博文IT-BLOG-CN 一、题目 给定两个大小分别为m和n的正序(从小到大)数组nums1和nums2。请你找出并返回这两个正序数组的 中位数 。 算法的时间复杂度应该为O(log (mn)) 。 示例 1: 输入:nums1 [1,3], nums2 [2] 输出&…

基于vue的联通积分商城数据可视化APP设计与实现

目 录 摘 要 I Abstract II 引 言 1 1 前端技术介绍 3 1.1 前端开发语言 3 1.1.1 HTML5 3 1.1.2 CSS3 3 1.1.3 JavaScript 3 1.2 MVVM开发模式 4 1.3 Vue框架 4 1.4 Axios技术 5 1.5 ECharts 5 1.6 数据库技术 5 1.7 本章小结 6 2 前端开发的分析 7 2.1 功能性需求分析 7 2.2 …

【项目】仿muduo库One Thread One Loop式主从Reactor模型实现高并发服务器

本篇博客记录从0到1实现一个仿mudo库的One Thread One Loop式主从Reactor模型的高并发服务器组件。 在此之前我们要明确的是,该项目仅作为一个高并发服务器组件,因此该项目并不包含实际的业务需求处理内容。 前置知识背景 一、HTTP服务器 概念&#xf…

【编程实践】matlab中的转义字符

简记 这个报错是因为在sprintf函数中使用了无效的转义字符\U。在MATLAB中,转义字符\U是无效的,因此会导致警告。 检查sprintf函数中的格式化字符串是否包含了无效的转义字符。确保只使用MATLAB支持的转义字符。 如果想要输出一个反斜杠字符\&#xff0c…

【常见集合】Java 常见集合重点解析

Java 常见集合重点解析 1. 什么是算法时间复杂度? 时间复杂度表示了算法的 执行时间 和 数据规模 之间的增长关系; 什么是算法的空间复杂度? 表示了算法占用的额外 存储空间 与 数据规模 之间的增长关系; 常见的复杂度&#x…

git - 笔记

为什么要学习Git 为什么要学习Git软件 为什么学习 因为在主流开发中,基于互联网软件开发的项目都会使用Git软件来进行项目开发过程中的资源管理 比如人力资源 代码资源 比如前端资源 .html .java等代码资源 文档资源 像项目开发中涉及到的需求文档等 这种项目中管理…

Langchain-Chatchat本地搭建ChatGLM3模型和提取PDF内容

文章目录 1、软件要求2、安装CUDA2.1、安装gcc2.2、安装CUDA 3、安装Anaconda33.1、下载Anaconda33.2、创建python虚拟环境 4、部署系统4.1、下载源码4.2、安装依赖4.3、下载模型4.4、初始化配置和知识库4.4.1、初始化配置4.4.2、初始化知识库 4.5、运行4.6、运行4.6.1、启动4.…

Qt初识 - 编辑框 | 按钮 | 命名规范

目录 一、编辑框 (一) Designer中的编辑框 (二) Code中的编辑框 二、按钮 (一) Designer中的按钮 (二) Code中的按钮 三、Qt中的命名规范 一、编辑框 (一) Designer中的编辑框 进入到Designer界面中 找到Input Widgets目录 找到该目录下的 将这个控件拉出去 双击就可…

神经网络softmax算法与卷积层

多类分类: 多类是分类算法中的一种,它区别于我们的0,1这样子的二进制分类,它会有多个分类的标签,让我们去取其中的一个。 softmax函数: softmax回归算法是我们的sigmoid回归的推广。 上图就是softmax运…

Koa: 打造高效、灵活的Node.js后端 (介绍与环境部署)

在上一篇文章中,我们了解了Node.js的基础知识,今天我们将进一步学习Node.js 较新的一个轻量级Web框架Koa,一起创建NodeJS后端服务器吧! 一、介绍 Koa是一个新生代Node.js Web框架,由Express原团队成员开发&#xff0c…

SpringBootWeb(接收请求数据,返回响应结果,分层解耦,Spring的IOCDI)【详解】

目录 一、接收请求数据 1. 接收表单参数 1.原始方式【了解】 2.SpringBoot方式 3.参数名不一致RequestParam 2.实体参数 1.简单实体对象 2.复杂实体对象 3.数组集合参数 4.日期参数 3. JSON参数 1.Postman发送JSON数据 2.服务端接收JSON数据 4. 路径参数(rest风格…

ChatGPT Plus 自动扣费失败,如何续订

ChatGPT Plus 自动扣费失败,如何续订 如果您的 ChatGPT Plus 订阅过期或扣费失败,本教程将指导您如何重新订阅。 本周更新 ChatGPT Plus 是一种每月20美元的订阅服务。扣费会自动进行,如果您的账户余额不足,OpenAI 将在一次扣费…

USB2.0设备检测过程信号分析

1.简介 USB设备接入的Hub端口负责检测USB2.0设备是否存在和确定USB2.0设备的速度。检测设备是否存在和确定设备速度涉及一系列的信号交互,下面将分析该过程。 2.硬件 USB低速设备和全速/高速设备的连接器在硬件结构上有所不同,而主机或者Hub接收端连接…

C++11_右值引用与移动语义

目录 1、左值的定义 1.1 左值引用 2、右值的定义 2.1 右值引用 3、右值与左值的使用区别 4、右值引用的意义 4.1 左值引用的短板 5、移动语义 5.1 移动构造 5.2 移动赋值 6、万能引用 6.1 右值的别名-左值化 6.2 完美转发 前言: 在C11之前就有了引…

地址分词 | EXCEL批量进行地址分词,标准化为十一级地址

一 需求 物流需要对用户输入地址进行检查,受用户录入习惯地址可能存在多种问题。 地址标准化是基于地址引擎和地址大数据模型,自动将地址信息标准化为省、市、区市县、街镇、小区、楼栋、单元、楼层、房屋、房间等元素,补充层级缺失数据、构建…

bug - poi getMergedRegion合并后的行列number错误

第一个CellRangeAddress 的Row number 应该是0&#xff0c;但是给出的是1。 其它的CellRangeAddress 与实际大致相差4-5不等&#xff0c;没有规律。 <dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>…