当前位置: 首页 > 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. 前…...

就dddcddddd

dianjiaodud1u...

JSW-8016GM4 加固交换机

■ 三层交换机&#xff0c;功能强大 ■ 支持16个10/100/1000M 以太网接口 ■ 支持4个10G光纤接口 ■ 支持IEEE802相关协议 ■ 2U高度&#xff0c;可在方舱上架安装 ■ 满足电磁兼容要求 ■ 整机加固设计&#xff0c;满足国军标相关要求主要参数产品类型&#xff1a;千兆以太网交…...

JeecgBoot启动配置

一、引入maven指定自己的maven仓库 二、指定JDK 记得apply&#xff01;&#xff01;&#xff01;&#xff01;然后OK 三、配置MySQL数据库(尽量≥5.7版本) 四、运行db文件夹下的SQL文件 五、后端本地环境&#xff08;application-dev.yml&#xff09;指定好数据源 1、M…...

构建企业级抓取服务:基于快马平台的openclaw生产环境部署实战

今天想和大家分享一个实战经验&#xff1a;如何用InsCode(快马)平台快速搭建企业级的openclaw分布式抓取服务。这个方案特别适合需要处理大规模数据采集的业务场景&#xff0c;比如电商价格监控、舆情分析或者竞品追踪。 分布式架构设计 生产环境最怕单点故障&#xff0c;所以我…...

2026降AIGC率工具实测:10款好用工具推荐(论文AI痕迹重必看)

临近毕业季&#xff0c;不少同学都在为论文的AIGC检测头疼&#xff1a;明明是自己写的内容&#xff0c;却被判定为AI生成&#xff1f;用AI搭了初稿&#xff0c;怎么改都消不掉机器痕迹&#xff1f;到底有没有靠谱的降AI率工具能真正解决问题&#xff1f; 今天我就给大家整理了1…...

个人 AI 助理——打造你的第二大脑

个人 AI 助理——打造你的第二大脑摘要&#xff1a;信息过载时代&#xff0c;个人 AI 助理不再是奢侈品&#xff0c;而是必需品。本文教你如何搭建专属 AI 助理&#xff0c;实现信息管理、知识沉淀、决策辅助的智能化&#xff0c;让 AI 成为你的"第二大脑"。一、为什…...

文墨共鸣大模型处理Java八股文与面试题:智能学习与模拟面试

文墨共鸣大模型处理Java八股文与面试题&#xff1a;智能学习与模拟面试 准备Java技术面试&#xff0c;大概是每个开发者都绕不开的一道坎。面对海量的“八股文”知识点和层出不穷的面试题&#xff0c;你是不是也经历过这样的场景&#xff1a;翻开厚厚的面试宝典&#xff0c;感…...

LangGraph多智能体框架:构建持久化AI智能体的终极指南 [特殊字符]

LangGraph多智能体框架&#xff1a;构建持久化AI智能体的终极指南 &#x1f680; 【免费下载链接】langgraph Build resilient language agents as graphs. 项目地址: https://gitcode.com/GitHub_Trending/la/langgraph 在当今快速发展的AI领域&#xff0c;多智能体框架…...

Pixelorama:从像素小白到艺术大师的完整指南

Pixelorama&#xff1a;从像素小白到艺术大师的完整指南 【免费下载链接】Pixelorama Unleash your creativity with Pixelorama, a powerful and accessible open-source pixel art multitool. Whether you want to create sprites, tiles, animations, or just express yours…...

BI 项目交付 SOP

...