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时,该位才有用 …

了解游戏引擎,游戏引擎的选择:2D3D游戏开发

常用的游戏开发引擎有很多,以下是一些在游戏开发领域中较为流行和广泛应用的引擎: 1. Unity游戏引擎 特点: 强大的跨平台支持,可以发布到多个平台,包括PC、移动设备和主机。 大量的插件和资产商店,便于…

大数据开发(Hadoop面试真题-卷九)

大数据开发(Hadoop面试真题) 1、Hive count(distinct)有几个reduce,海量数据会有什么问题?2、既然HBase底层数据是存储在HDFS上,为什么不直接使用HDFS,而还要用HBase?3、Spark map join的实现原理&#xf…

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

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

运维知识点-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] 输出&…

利用 cloudflare 实现域名HTTP转变成 HTTPS

https://dash.cloudflare.com/ 域名解析需要 在cloudflare 做SSL/TLS 加密链接设置 灵活 加密浏览器与 Cloudflare 之间的流量 后台设置的链接不用改变,使用真实的HTTP链接。 在wordpress functions 上做域名替换。 function replacehttp($content){$content …

基于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…

gradle使用国内可用镜像快速下载

使用官网下载非常的慢,建议使用镜像站: (1)官网地址:https://services.gradle.org/distributions/ (2)腾讯镜像 Gradle下载地址:https://mirrors.cloud.tencent.com/gradle/ &#…

网络协议学习DAY2--TCP通信

TCP发端: socket connect send recv close TCP收端: socket bind listen accept send recv 各函数资料: 1.connect int connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen); 功能:…

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.…

hive,hbase集群拷贝注意事项

注意事项: 1.有足够的带宽,最好能300M/S 磁盘写入速度 2.两个集群的在一个网络,且新集群的主机名可以访问的域名。 CDH的主机名不能轻易更改,若只能换主机名建议重新部署CDH集群。 3.数据拷贝跑后台进程 hive表跨集群备份 注…

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…