
正文
rocketmq架构设计分析,rocketmq的原理
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
RocketMQ事务机制的底层实现原理解析
1、RocketMQ是基于pull模式拉取消息,consumer做负载均衡并通过长轮询向broker拉消息,长轮询拉取消息后回调MessageListener接口实现完成消费。
2、RocketMQ的具体实现策略是:写入的如果事务消息,对消息的Topic和Queue等属性进行替换,同时将原来的Topic和Queue信息存储到消息的属性中,正因为消息主题被替换,故消息并不会转发到该原主题的消息消费队列,消费者无法感知消息的存在,不会消费。
3、其实现原理是,事务消息开始是Prepare状态,RocketMQ会将其持久化到本地Mysql中,然后如果收到确认消息,就删除掉这条prepare消息,如果迟迟收不到确认消息,那么RMQ会定时的扫描prepare消息,发送给produce group进行回查确认。
4、第一代的Notify主要使用了推模型,解决了事务消息;第二代的MetaQ主要使用了拉模型,解决了顺序消息和海量堆积的问题。
相关问答
Q1: 聊聊RocketMQ(一)
1、加入RocketMQ后,整个业务方发送消息的流程变成: 业务方调用rpc框架如dubbo接口发送消息后,直接将消息内容放入RocketMQ; 发消息后端服务从RocketMQ中获取消息内容,完成后续发消息流量,投递给前端。
2、RocketMQ提供了一系列功能和特性,下面列举几个比较受欢迎的特点: 高可靠性:RocketMQ采用主从复制的模式,确保消息的可靠性传输。即使其中一个Broker节点宕机,系统仍然能够正常工作。
3、当前主要在后端中间件方向,在公众号【瓜农老梁】已陆续发表百余篇源码实战类文章,涵盖 RocketMQ 系列、Kafka 系列、GRPC 系列、Nacosl 系列、Sentinel 系列、Java NIO 系列。目前就职于哈啰出行,任职高级技术专家。
4、阿里系下开源的一款分布式、队列模型的消息中间件,原名Metaq,0版本名称改为RocketMQ,是阿里参照kafka设计思想使用java实现的一套mq。
5、RockerMQ在k8s的部署有两种方式, 一种是使用operator 在k8s集群中部署,可参考 operation项目 ; 一种是编写简单的k8s配置文件,在rocketmq的docker项目中有提供模板。
Q2: RocketMQ(三)——系统架构
1、RocketMQ架构上主要分为四部分构成:消息生产者,负责生产消息。
2、这其实就是RocketMQ集群化部署抗下高并发的主要原理,当然,具体怎么做才能让系统的流量分散在RocketMQ部署的多台机器上,这个以后再找机会做一个比较详细的分享,今天主要先讲大体上的一个架构原理。
3、RocketMQ是阿里巴巴捐赠给appache的MQ开源组件,从架构上我们分析一下。kafka是依靠Zookeeper进行集群选举的,在rocketMQ的同样位置上是NameServer,这个Nameserver仅仅是注册服务,没有选举能力。
4、低延迟消息引擎RocketMQ,在二代功能特性的基础上,为电商金融领域添加了可靠重试、基于文件存储的分布式事务等特性。使用在了阿里大量的应用上,典型如双11场景,具有万亿级消息流转。
5、下图是官网上的架构图,可以看到RocketMQ分为四个部分:其中,根据RocketMQ Broker的集群方式的不同,大概可以分为三种:在配置文件所在目录 conf 中,我们可以看到有三个文件夹:2m-noslave、2m-2s-async、2m-2s-sync。
Q3: 松下显示hh是什么故障?
比如:网络原因闪断,ACK返回失败等等故障,确认信息没有传送到消息队列,导致消息队列不知道自己已经消费过该消息了,再次将该消息分发给其他的消费者。
整机不工作 可能原因:停电,电源插头未插人电源插座或插人但接触不良,保险丝直径太细,容量不足,机门未关好,门控开关触头接触不良,程控器旋钮仍处于“关”(OFF)档。
温度传感器损坏。当温度传感器损坏时,冰箱无法读取温度信息并控制冷凝器的工作。因此,它无法正确地维持冰箱内部的温度。 控制板故障。冰箱控制板是控制压缩机和冷凝器工作的设备。
温控器显示HH的意思通常指冰柜达到额定的最高温度;冰柜温控器显示LL的意思通常指冰柜达到额定的最低温度;如冰柜最高的温度不能超过4℃,设定的温度高于这个或者冰柜温控器检测到的温度超过4℃就会出现这种情况。
松下洗衣机出现H码有以下几种可能:H01码:水位开关异常。H02码:电机双向可控硅异常。H04码:电源继电器短路异常。H05码:记忆异常(芯片存储器异常)。H07码:运转传感器异常H08码:热敏电阻异常。
Q4: 【rocketmq客户端】订阅关系一致
rocket mq的tag级别的消息过滤功能,其实现原理包括两方面:存储模型 rocket mq为每一个topic建立索引,方便消费者按照topic进行消费,其具体实现为ConsumeQueue(消息队列)。
不仅Topic必须一致,tags也必须一致,具体原因可以参考上面的链接,大致是因为RocketMQ会检索最后一个注册的Consumer的监听策略,之前的会失效。
RocketMQ 消息订阅有两种模式,一种是Push模式(MQPushConsumer),即MQServer主动向消费端推送;另外一种是Pull模式(MQPullConsumer),即消费端在需要时,主动到MQ Server拉取。
Consumer端 RocketMQ消费端有两种类型:MQPullConsumer和MQPushConsumer。MQPullConsumer由用户控制线程,主动从服务端获取消息,每次获取到的是一个MessageQueue中的消息。
RocketMQ-client:RocketMQ-client是RocketMQ的客户端,提供了发送和接收消息的API,可以与RocketMQ的Broker进行交互。
Topic表示一类消息的集合,每个主题包含若干条消息,每条消息只能属于一个主题,是RocketMQ进行消息订阅的基本单位。
Q5: RocketMQ第五讲
RocketMQ就是把内存中使用的那个队列,变成一个独立的、大家都可以用的队列系统。一个业务事件,是整个MQ领域最核心的概念,无论是生产还是消费都是针对Topic进行操作。
首先发送消息前先将消息保存到数据库中,有一个状态字段status=0,表示生产端将消息发送给了RabbitMQ但还没收到确认;在生产端收到确认后将status设为1,表示RabbitMQ已收到消息。
这里我们可以看到,NameServer是用作RocketMQ的路由中心来使用的。RocketMQ为什么不使用ZooKeeper而自己开发NameServer? 在服务发现领域,ZooKeeper根本就不能算是最佳的选择。
rocketmq架构设计分析的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于rocketmq的原理、rocketmq架构设计分析的信息别忘了在本站进行查找喔。






