Rocket MQ 从入门到实践

为什么要使用消息队列,解决什么问题?(消峰、解藕、异步)

消峰填谷
客户端=》 网关 =〉 消息队列=》秒杀服务
异步解耦

消息队列中的重要概念理解。(主题、消费组、队列,游标?)

主题(Topic)
消息传输和存储的顶层容器,用于标识同一类业务逻辑的消息
队列(MessageQueue)
消息存储和传输的实际容器,一个Topic有多个队列,可水平扩展
消息(Message)
单位消息,每个消息都有扩展性,负载等信息
消费者(Consumer)
接受并处理消息的运行实体,取到消息业务逻辑进行处理,分PushConsumer和PullConsumer等
消费者组
也叫Consumer ID,多个消费行为一致的消费者的负载均衡分组
生产者
构建并传输消息到服务端的运行实体

消息队列的两种模式
队列模式
请添加图片描述
发布-订阅模式请添加图片描述
如何实现多消息者订阅同一份消息
RabbitMQ消息模式
生产者将消息发送给Exchange交换机,交换机路由到不同的队列,不同的消费者针对不同的队列进行消费,实现简单、但是消息存储冗余

RocketMQ/Kafka消息模式
生产者将消息推送到队列之后,如果有消费者去消费这个主题上的消息,在队列上记录下不同消费者互不干扰不同的消费位置,它就可享有同一份消息

RocketMQ 部署架构
请添加图片描述
核心关系:主题、队列、消费者、消费组、消费位置
请添加图片描述

最佳实践:合理划分主题和Tag

接入Rocket MQ,业务消息的拆分可以基于Topic进行,也可以基于消息tag和属性进行
遵守三个基本原则
1、消息的类型是否一致:不同类型的消息,如顺序消息和普通消息需要使用不同的主题进行拆分,无法通过tag标签进行分类
2、业务域是否相同:不同业务域和部门的消息应该拆分不同的主题。例如物流消息和支付消息应该使用两个不同的主题
3、消息量级和重要性是否一致:如果消息的量级规模存在巨大差异,或者说消息的链路重要程度存在差异,则应该使用不同的主题进行隔离拆分

订阅关系一致性
同一个消费组、订阅的Topic一样,且过滤的表达式也要一致

消息堆积怎么办?

1、发送端堆积(比较少见)
批量发送
增加并发
2、消费端堆积
增加资源
加机器、升配置等。增加机器无效果考虑增加topic队列数
提升消费性能
优化消费逻辑,批量并发消费、改用性能更好的语言
解决报错
顺序消费,某个队列单条消息消费失败(大量的消费重试),导致队列阻塞,堆积
系统降级
服务重要业务,降低影响

一定要保证消费端的性能要高于生产端的发送性能、这样才的系统才能健康的持续运行

Rocket MQ 如何确保消息不丢失(生产、存储、消费三个阶段)

生产阶段 消息在生产者创建出来,经过网络传输到Broker端
检查发送状态、失败要有补偿机制
存储阶段 在这个阶段消息在Broker端存储。
集群部署,主备都写成功,才返回成功
消费阶段 Consumer从Broker上拉取消息,经过网络传输到Consumer上
失败重试、消费者失败回应RECONSUMER_LATER
重试多次进入死信队列、堆积监控。

如何处理消费过程中的重复问题?(消费重复的情况必然存在,如何幂等处理?)

在MQTT协议中,给出了三种传递消息时能够提供服务质量的标准
At most once: 无可靠性保证、允许丢消息
At least once:至少被送达一次。即不丢消息,但也有少量重复。
Exactly once:消息只会被送达一次,不丢失也不重复

幂等性
At least once+幂等性 = Exactly once
1、利用数据库的唯一约束实现幂等(主键、如Redis setnx)
2、为更新的数据设置前置条件
3、记录并检查操作(Token机制或者GUID(全局唯一ID)机制)

Rocket MQ 如何解决消息顺序问题?(全局有序只能开一个队列,局部有序,要求顺序放同一个队列)

顺序消息:有网络延迟如何保证消费顺序?
因为网络延迟M2消息比M1先到Server服务端
全局有序
增加ACK确认机制,全局串行,缺点只要一条消息有问题,就会全局阻塞
局部有序
需要顺序消费时,针对队列加锁串行消费,这样实现局部有序,适用于大多数场景,使得同一个Topic中多个队列能并行消费,提高效率

RocketMQ 事务消息:二阶段消息+反查机制

概念:事务消息,主要解决生产方和消费方的数据最终一致性问题。
Q1:作为消息发送方,如何保证两步数据一致?
Q2:作为消息发送方,能保证消费时一定成功么?
请添加图片描述

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

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

相关文章

新手向-从VNCTF2024的一道题学习QEMU Escape

[F] 说在前面 本文的草稿是边打边学边写出来的,文章思路会与一个“刚打完用户态 pwn 题就去打 QEMU Escape ”的人的思路相似,在分析结束以后我又在部分比较模糊的地方加入了一些补充,因此阅读起来可能会相对轻松(当然也不排除这是…

Transformer总结

1.Transform背景介绍 1.1Transform的优势 相比于之前占领市场的LSTM和GRU模型,Transformer有两个显著的优势: (1)Transform能够使用分布式GPU进行并行训练,提升模型训练效率 (2) 在分析预测…

zookeeper基础学习之六: zookeeper java客户端curator

简介 Curator是Netflix公司开源的一套zookeeper客户端框架,解决了很多Zookeeper客户端非常底层的细节开发工作,包括连接重连、反复注册Watcher和NodeExistsException异常等等。Patrixck Hunt(Zookeeper)以一句“Guava is to Java…

【算法刷题 | 数组】3.12(二分查找、移除元素、有序数组的平方、长度最小的子数组、螺旋矩阵2)

文章目录 1.二分查找1.1题目1.2思路(核心:区间的定义)1.3左闭右闭1.4左闭右开1.5总结 2.移除元素2.1题目2.1思路2.2.1暴力解法2.2.2双指针法 23总结 3.有序数组的平方3.1题目3.2思路3.2.1暴力解法3.2.2双指针法 4.长度最小的子数组4.1题目4.2…

Linux中文件和目录管理(创建删除移动复制)

目录 1——一次建立一个或多个目录:mkdir ​2——创建一个空文件:touch 3——移动和重命名:mv 4——复制文件和目录:cp 5—— 删除目录和文件:rmdir和rm 在学习文件与目录的管理的一些命令之前,我们先…

深度学习-面经(part2、CNN)

2 CNN 对图像(不同的数据窗口数据)和滤波矩阵做内积(逐个元素相乘再求和)的操作就是所谓的『卷积』操作。 卷积神经网络由输入层、卷积层、激励层、池化层、全连接层组成。 ① 最左边: 数据输入层,对数据做一些处理…

数字后端 EDA 软件分享

数字后端 EDA 软件分享 推荐这几家的EDA工具吧,虽说我也支持国产工具,但是我还是选择了这几家的工具 apache cadence mentor synopsys 下图我现在用的eda环境,利用网上的资源,自己独立在vmware上搭建好的EDA环境 除去pdk&#…

从政府工作报告探究计算机行业发展

从政府工作报告探计算机行业发展 政府工作报告作为政府工作的全面总结和未来规划,不仅反映了国家整体的发展态势,也为各行各业提供了发展的指引和参考。随着信息技术的快速发展,计算机行业已经成为推动经济社会发展的重要引擎之一。因此&…

计算机考研|怎么备考「科软」?

学好408和考研数学就可以了 大家对于科软已经回到了理性的区间,很难再出现刚开始的300分上科软的现象,也不会再出现388分炸穿地心的现象。 如果大家想报考科软,我觉得一定要认真对待复习,不要抱有抄底的心态去复习。 众所周知&am…

7.JavaWebHTML:构建数字世界的语言和结构

目录 导语: 第一部分:Web概念与作用 1.1 Web的定义 1.2 Web的作用 1.3 JavaWeb 第二部分:HTML概念与内容 2.1 HTML的定义 2.2 HTML的内容 第三部分:HTML的作用 3.1 HTML的作用 3.2 HTML在现代Web开发中的角色 …

[Redis]——主从同步原理(全量同步、增量同步)

目录 Redis集群: 主从同步原理: replid和offset: 全量同步和增量同步: repl_baklog文件: 主从集群的优化: Redis集群: 部署多台Redis我们称之为Redis集群,他有一个主节点(负责写操作)&…

爱普生晶振发布RTC模块晶振(压电侠)

爱普生晶振一直以”省,小,精”技术作为资深核心,并且已经建立了一个原始的垂直整合制造模型,可以自己创建独特的核心技术和设备,使用这些作为基地的规划和设计提供独特价值的产品. 世界领先的石英晶体技术精工爱普生公…

中国联通智慧矿山行业解决方案

中国联通国际公司以其全球化服务能力,针对矿山行业的特殊挑战提供了定制化的解决方案,尤其是在网络通信基础设施搭建和智能应用部署方面,助力企业克服远程作业环境下的通信难题,并有效拓展海外市场。 对于矿山类企业而言&#xf…

【遍历方法】浅析Java中字符串、数组、集合的遍历

目录 前言 字符串篇 1.1 使用 for 循环和 charAt 方法 1.2 使用增强 for 循环(forEach 循环) 1.3 使用 Java 8 的 Stream API 最终效果 数组篇 2.1 使用普通 for 循环 2.2 使用增强型 for 循环( forEach 循环) 2.3 使用 Arrays.asList 和 forE…

解决:springboot项目访问hdfs文件提示guava版本不兼容

1、问题描述 版本说明:我用的hadoop版本:3.1.3 项目可以正常启动,但是调用访问hdfs的服务时候报错,报错消息如下:com.google.common.base.preconditions.checkArgument(ZL java/lang/String;Ljava/lang/Object:)V 原因分析&#x…

Flutter开发进阶之使用工具效率开发

Flutter开发进阶之使用工具效率开发 软件开发团队使用Flutter开发的原因通常是因为Flutter开发性能高、效率高、兼容性好、可拓展性高,作为软件PM来说主要考虑的是范围管理、进度管理、成本管理、资源管理、质量管理、风险管理和沟通管理等,可以看到Flu…

企业内部培训考试系统培训计划功能说明

培训计划是预设好的一套课程系列,包含课程和考试,分多个阶段,每完成一个阶段就会在学习地图上留下标记,让用户看到自己的努力成果,增强成就感,从而坚持完成课程。 企业内部培训考试系统中如何设置培训计划…

基于springboot的购物商城管理系统

1.项目简介 1.1 用户简介 用户主要分为管理员和用户端: 管理员: 管理员可以对后台数据进行管理、拥有最高权限、具体权限有登录后进行首页轮播图的配置管理、商品的配置、新品家具商城的配置管理、、家具商城分类管理配置、家具商城详情商品管理、用户…

react-面试题

一、组件基础 1. React 事件机制 <div onClick{this.handleClick.bind(this)}>点我</div> React并不是将click事件绑定到了div的真实DOM上&#xff0c;而是在document处监听了所有的事件&#xff0c;当事件发生并且冒泡到document处的时候&#xff0c;React将事…

网络安全JavaSE第二天(持续更新)

3. 基本数据与运算 3.6 运算符 3.6.1 算术运算符 在 Java 中&#xff0c;算术运算符包含&#xff1a;、-、*、/、% public class ArithmeticOperator { public static void main(String[] args) { int a 10; // 定义了一个整型类型的变量 a&#xff0c;它的值是 10 int b …