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

RocketMQ详解及注意事项

RocketMQ是阿里巴巴开源的一款分布式消息中间件,具有高吞吐量、高可用性、可扩展性和稳定性强等特点,广泛应用于异步消息、应用解耦、流量削峰填谷等场景。本文将详细介绍RocketMQ的基本架构、工作流程、消息模型,并列出在使用RocketMQ时需要注意的问题。

RocketMQ基本架构

RocketMQ主要由四部分组成:NameServer、Broker、Producer和Consumer。

  • NameServer:提供轻量级的服务发现和路由。每个NameServer记录完整的路由信息,提供快速的存储路由信息和读取路由信息的功能。

  • Broker:负责存储和转发消息。Broker在启动时,会将自己注册到所有的NameServer上,所有的Broker构成一个完整的消息系统。

  • Producer:消息的生产者,负责生产消息,发送消息。

  • Consumer:消息的消费者,负责消费消息,接收消息。

RocketMQ的基本工作流程

  1. 启动NameServer:NameServer起来后监听端口,等待Broker、Producer、Consumer连上来,相当于一个路由控制器。

  2. Broker启动:在Broker启动的时候,会创建和NameServer的连接,定时发送心跳包。心跳包中包含当前Broker信息(IP、端口等)以及存储所有的Topic信息。

  3. 发送消息:首先Producer会从NameServer中查找Topic的路由信息,然后选择一个队列(负载均衡算法),然后直接与Broker建立长连接,发送消息。

  4. 消费消息:Consumer从NameServer获取Topic的路由信息,然后从Broker中拉取消息,拉取到消息之后,消费者消费消息,然后向Broker发送消费进度。

RocketMQ的消息模型

RocketMQ主要有两种消息模型:点对点模型(P2P)和发布/订阅模型(Pub/Sub)。

  • 点对点模型:消息生产者产生消息,直接发送给某个消息消费者。这种模式下,消息被消费者直接消费,不需要经过Broker。

  • 发布/订阅模型:消息生产者(发布者)将消息发布到Topic,多个消息消费者(订阅者)订阅这个Topic,然后都可以收到消息。这种模式下,消息传输过程中需要经过Broker。

RocketMQ使用中需要注意的问题

1. 消息重复

在使用RocketMQ的过程中,可能会出现消息重复的情况。这主要是因为网络问题或者消费者处理消息的速度跟不上生产者发送消息的速度造成的。为了避免这种情况,我们可以设置消费者的消费策略为顺序消费,这样就可以保证消息的顺序性。同时,我们也可以在消费者端进行去重操作,比如使用数据库的唯一索引等方式。

2. 消息丢失

消息丢失通常是由于Broker宕机或者网络问题造成的。为了避免消息丢失,RocketMQ提供了消息持久化的功能,即将消息存储在磁盘上。此外,我们还可以设置消息的重试次数,当消息发送失败时,可以重新发送。

3. 消息积压

如果消费者处理消息的速度跟不上生产者发送消息的速度,就会造成消息积压。为了解决这个问题,我们可以增加消费者的数量,提高消费者的消费速度。同时,我们也可以对消息进行分类,将不同类型的消息发送到不同的队列中,然后由不同的消费者消费。

Java示例

以下是一个简单的Java示例,展示如何使用RocketMQ进行消息的发送和接收。

创建Producer

DefaultMQProducer producer = new DefaultMQProducer("ProducerGroupName");
producer.setNamesrvAddr("127.0.0.1:9876");
producer.start();for (int i = 0; i < 100; i++) {Message msg = new Message("TopicTest", "TagA", ("Hello RocketMQ " + i).getBytes(RemotingHelper.DEFAULT_CHARSET));SendResult sendResult = producer.send(msg);System.out.printf("%s%n", sendResult);
}producer.shutdown();

创建Consumer

DefaultMQPushConsumer consumer = new DefaultMQPushConsumer("ConsumerGroupName");
consumer.setNamesrvAddr("127.0.0.1:9876");
consumer.subscribe("TopicTest", "*");consumer.registerMessageListener(new MessageListenerConcurrently() {@Overridepublic ConsumeConcurrentlyStatus consumeMessage(List<MessageExt> msgs, ConsumeConcurrentlyContext context) {System.out.printf("%s Receive New Messages: %s %n", Thread.currentThread().getName(), msgs);return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;}
});consumer.start();

总结

RocketMQ作为一款优秀的分布式消息中间件,凭借其高吞吐量、高可用性、可扩展性和稳定性强等特点,被广泛应用于各种场景。以上内容对RocketMQ进行了详细的介绍,包括其基本架构、工作流程、消息模型以及Java示例,并列出了在使用RocketMQ时需要注意的问题,希望可以帮助大家更好地理解和使用RocketMQ。

👉 💐🌸 公众号请关注 "果酱桑", 一起学习,一起进步! 🌸💐

相关文章:

RocketMQ详解及注意事项

RocketMQ是阿里巴巴开源的一款分布式消息中间件&#xff0c;具有高吞吐量、高可用性、可扩展性和稳定性强等特点&#xff0c;广泛应用于异步消息、应用解耦、流量削峰填谷等场景。本文将详细介绍RocketMQ的基本架构、工作流程、消息模型&#xff0c;并列出在使用RocketMQ时需要…...

选择适合的项目管理系统,了解有哪些选择和推荐

随着科技的进步和全球竞争的加剧&#xff0c;项目管理已经成为企业成功的关键要素。为了更好地组织和监控项目&#xff0c;许多企业和组织正在采用项目管理系统(PMS)。本文将探讨项目管理系统的主要组成部分以及其在实际应用中的优势。 “项目管理系统有哪些?国际上比较常见的…...

linux基础命令-cd

切换当前工作目录使用 cd 命令 在 Linux 操作系统中&#xff0c;cd 是一个常用的命令&#xff0c;用于切换当前的工作目录。工作目录是用户当前所在的文件夹&#xff0c;执行命令时将会在该目录中进行操作。cd 命令的功能是更改当前工作目录到指定的目录位置。在本文中&#xf…...

MySQL数据库分库分表备份

分库备份 创建脚本并编写 [rootlocalhost scripts]# vim bak_db_v1.sh #!/bin/bash 备份的路径 bak_path/backup/db 账号密码 mysql_cmd-uroot -pRedHat123 需要排除的数据库 exclude_dbinformation_schema|mysql|performance_schema|sys 检验备份路径是否存在&#…...

PyTorch 中的累积梯度

https://stackoverflow.com/questions/62067400/understanding-accumulated-gradients-in-pytorch 有一个小的计算图&#xff0c;两次前向梯度累积的结果&#xff0c;可以看到梯度是严格相等的。 代码&#xff1a; import numpy as np import torchclass ExampleLinear(torch…...

【面试精品】运维工程师需要具备的核心能力有哪些?

运维&#xff0c;在部分没有接触过IT的小伙伴的概念中觉得是一个比较低级的职位&#xff0c;很容易从字面理解为运营、维护. 很多朋友认为&#xff0c;无论IDC机房运维、网络运维、桌面运维、Linux系统运维、数据库运维、云计算运维、等在互联网公司中的工作就是安装系统&…...

微服务实战项目-学成在线-选课学习(支付与学习中心)模块

微服务实战项目-学成在线-选课学习(支付与学习中心)模块 1 模块需求分析 1.1 模块介绍 本模块实现了学生选课、下单支付、学习的整体流程。 网站的课程有免费和收费两种&#xff0c;对于免费课程学生选课后可直接学习&#xff0c;对于收费课程学生需要下单且支付成功方可选…...

postman和jmeter的区别何在?

小伙伴们大家好呀&#xff0c;前段时间笔者做了一个小调查&#xff0c;发现软件测试行业做功能测试和接口测试的人相对比较多。在测试工作中&#xff0c;有高手&#xff0c;自然也会有小白&#xff0c;但有一点我们无法否认&#xff0c;就是每一个高手都是从小白开始的&#xf…...

maven安装(windows)

环境 maven&#xff1a;Apache Maven 3.5.2 jdk环境&#xff1a;jdk 1.8.0_192 系统版本&#xff1a;win10 一、安装 apache官网下载需要的版本&#xff0c;然后解压缩&#xff0c;解压路径尽量不要有空格和中文 官网下载地址 https://maven.apache.org/download.cgihttps:…...

自学安全卷不动,是放弃还是继续?

有天我想去搜一下怎么约女孩子看电影比较不油腻的时候&#xff0c;突然看到一个话题“自学网络安全的人都是什么感受”。 因为我的粉丝们大部分都是在自学或者是准备入行的大学生&#xff0c;所以我很认真一个一个去看了下别人的回答。基本都是劝退自学为主&#xff0c;因为自学…...

Django实现音乐网站 ⑶

使用Python Django框架制作一个音乐网站&#xff0c;在系列文章2的基础上继续开发&#xff0c;本篇主要是后台单曲、专辑、首页轮播图表模块开发。 目录 后台单曲、专辑表模块开发 表结构设计 单曲表&#xff08;singe&#xff09;结构 专辑表&#xff08;album&#xff09…...

(13) Qt事件系统(two)

目录 事件分发函数 无边框窗口拖动 自定义事件 发送事件的函数 自定义事件 系统定义的事件号 自定义事件号 自定义事件类 发送和处理事件 sendEvent与postEvent的区别 栈区对象 堆区对象 事件传播机制 事件传播的过程 事件传播到父组件 鼠标单击事件与按钮单击信…...

PHP的知识概要

PHP技术基础 1、PHP是Hypertext Preprocessor的缩写&#xff0c;是基于服务器端运行的脚本程序语言&#xff0c;可以实现数据库和网页之间的数据交互。PHP可以单独运行&#xff0c;也可镶嵌在HTML文件 中。它具有开发快速、性能稳定的优点。 2、PHP是嵌入式脚本语言&…...

JSON格式Python,Java,PHP等封装根据商品ID获取快手商品详情数据方法

快手商城是一个网上购物平台&#xff0c;售卖各类商品&#xff0c;包括服装、鞋类、家居用品、美妆产品、电子产品等。要获取拼多多商品详情数据&#xff0c;您可以通过开放平台的接口或者直接访问快手商城的网页来获取商品详情信息。以下是两种常用方法的介绍&#xff1a; 1.…...

【ASP.NET MVC】MYSQL安装配置(4)

一、安装配置 1、下载MYSQL绿色版压缩包&#xff08;略&#xff09; 2、解压到目录&#xff0c;比如E:\mysql目录 3、设置环境变量 添加bin目录到path&#xff0c;方便运行Mysql的命令 先打开系统的《环境变量》配置 双击系统变量中的Path 添加Mysql的BIN目录到path: 4、在…...

前端框架学习-Vue(二)

最近在学习Vue框架&#xff0c;Vue中的内容很多。相当于把之前后端的MVC&#xff0c;V层转移到前端来编写和部署。下面是学习Vue时的大纲。 Vue生命周期是Vue应用的生命周期Vue脚手架&#xff0c;即vue-cli&#xff0c;使用node.js 来创建和启动vue项目Vue组件知识&#xff0c;…...

sublime配置less的一些坑(1)

仅在sublime的Install Package安装保存less报错 在sublime的Install Package安装less 打开sublime软件,按住CtrlShiftP组合键,弹出的界面中选择Install Package 选中后enter或者回车。等会弹出一个弹窗,大致意思是说你已经成功安装了package control。如果你在此之前已经安装了…...

解码“平台工程”,VMware 有备而来

随着全球数字化进程加快&#xff0c;企业使用前沿技术加快商业创新&#xff0c;以提高竞争力。其中如何加快开发效率&#xff0c;为客户创造更多价值成为新的关注焦点。 继DevOps后&#xff0c;“平台工程”&#xff08;Platform Engineering&#xff09; 一词引发热议。平台工…...

2023年第四届华数杯数学建模A题B题C题D题思路代码分析

文章目录 0 赛题思路1 竞赛信息2 竞赛时间3 组织机构4 建模常见问题类型4.1 分类问题4.2 优化问题4.3 预测问题4.4 评价问题 0 赛题思路 &#xff08;赛题出来以后第一时间在CSDN分享&#xff09; https://blog.csdn.net/dc_sinor 1 竞赛信息 为了培养学生的创新意识及运用数…...

java版直播商城平台规划及常见的营销模式+电商源码+小程序+三级分销+二次开发 bbc

​ 1. 涉及平台 平台管理、商家端&#xff08;PC端、手机端&#xff09;、买家平台&#xff08;H5/公众号、小程序、APP端&#xff08;IOS/Android&#xff09;、微服务平台&#xff08;业务服务&#xff09; 2. 核心架构 Spring Cloud、Spring Boot、Mybatis、Redis 3. 前…...

自动驾驶开发必备:Vscode+Git双神器组合的隐藏技巧(含分支管理秘籍)

自动驾驶开发必备&#xff1a;VscodeGit双神器组合的隐藏技巧&#xff08;含分支管理秘籍&#xff09; 在自动驾驶开发领域&#xff0c;高效的代码管理和协作流程是项目成功的关键因素。随着代码库规模不断扩大&#xff0c;团队规模持续增长&#xff0c;传统的版本控制方式往往…...

寒冬降临:当资本撤出AI测试赛道

2026年初&#xff0c;全球资本市场对AI技术的狂热投资骤然降温。随着VC基金转向更保守的资产配置&#xff0c;依赖融资的AI测试工具开发商面临生存危机&#xff1a;初创公司批量裁员&#xff0c;开源项目停止维护&#xff0c;企业采购的智能测试平台因无法续约沦为“断线木偶”…...

PowerToys Image Resizer:告别繁琐,三秒搞定图片批量处理

PowerToys Image Resizer&#xff1a;告别繁琐&#xff0c;三秒搞定图片批量处理 【免费下载链接】PowerToys Microsoft PowerToys is a collection of utilities that supercharge productivity and customization on Windows 项目地址: https://gitcode.com/GitHub_Trendin…...

【限时解禁】Cuvil编译器v0.9.3内部架构设计图(含Python动态类型静态化映射表),仅开放72小时

第一章&#xff1a;Cuvil 编译器在 Python AI 推理中的应用Cuvil 是一款面向 AI 工作负载的轻量级领域专用编译器&#xff0c;专为优化 Python 生态中基于 PyTorch 和 ONNX 的模型推理而设计。它通过静态图重写、算子融合与硬件感知调度&#xff0c;在不修改用户代码的前提下&a…...

Bypass Paywalls Clean:智能内容解锁工具的终极使用指南

Bypass Paywalls Clean&#xff1a;智能内容解锁工具的终极使用指南 【免费下载链接】bypass-paywalls-chrome-clean 项目地址: https://gitcode.com/GitHub_Trending/by/bypass-paywalls-chrome-clean 在数字化信息时代&#xff0c;学术研究者、新闻从业者和知识工作者…...

S2-Pro模型部署在CentOS7生产环境:系统调优与安全加固

S2-Pro模型部署在CentOS7生产环境&#xff1a;系统调优与安全加固 1. 引言 在AI模型生产环境部署中&#xff0c;系统调优和安全加固往往是被忽视却至关重要的环节。很多团队花费大量精力优化模型性能&#xff0c;却因为基础环境配置不当导致服务不稳定或安全漏洞。本文将手把…...

揭秘JVM创世过程之Call Stub进入Java世界的门票

前言 本文旨在记录近期研读Java源码的学习心得与疑难问题。由于个人理解水平有限&#xff0c;文中内容可能存在疏漏&#xff0c;恳请读者不吝指正。 前情回顾 在揭秘JVM创世过程之两种语言首席外交官JavaCalls&#xff0c;一文中将JVM看作Java世界中一个拥有两种语言的领事馆…...

补个基础:闭包和this指针调用

//定义了一个普通的函数 const search()>{console.log(search) } //定义了一个防抖函数 function debounce(fn,delay){let timer nullreturn (...args)>{clearTimeout(timer)timersetTimeout(()>{//为什么要apply&#xff0c;改变指针指向fn.apply(this,args)console.…...

Pixel Epic智识终端效果展示:跨领域研报生成一致性与专业性验证

Pixel Epic智识终端效果展示&#xff1a;跨领域研报生成一致性与专业性验证 1. 产品概览与核心价值 Pixel Epic智识终端是一款基于AgentCPM-Report大模型构建的专业研究报告生成工具。与传统AI工具不同&#xff0c;它创新性地采用了像素RPG游戏的美学设计&#xff0c;将枯燥的…...

Spring Boot项目实战:用ShardingSphere-JDBC 5.3.2搞定PostgreSQL分库分表,附完整配置流程

Spring Boot与ShardingSphere-JDBC深度整合&#xff1a;PostgreSQL分库分表实战指南 当你的应用用户量突破百万级&#xff0c;单表数据量超过千万行时&#xff0c;是否经常遇到查询响应变慢、写入性能下降的问题&#xff1f;作为经历过多次系统扩容的老兵&#xff0c;我想分享一…...