兴科数码

rocketmq批量拉取(rocketmq批量拉取消息)

本篇目录:

RocketMQ架构分析

RocketMQ是阿里巴巴捐赠给appache的MQ开源组件,从架构上我们分析一下。kafka是依靠Zookeeper进行集群选举的,在rocketMQ的同样位置上是NameServer,这个Nameserver仅仅是注册服务,没有选举能力。

RocketMQ的解决思路是Broker主从架构以及多副本策略。

rocketmq批量拉取(rocketmq批量拉取消息)-图1

就是必须要half消息进入到RocketMQ内部的RMQ_SYS_TRANS_HALF_TOPIC的comsumeQueue文件中,此时就认为half消息写入成功了,然后就会返回成功消息给订单系统了。

RocketMQ的架构设计 RocketMQ的核心组件 RocketMQ主要由NameServer、Broker、Producer以及Consumer四部分构成。1)NameServer:主要负责对于源数据的管理,包括了对于Topic和路由信息的管理。

RocketMQ 阿里系下开源的一款分布式、队列模型的消息中间件,原名Metaq,0版本名称改为RocketMQ,是阿里参照kafka设计思想使用java实现的一套mq。

rocketmq批量拉取(rocketmq批量拉取消息)-图2

RocketMQ的事务消息

1、就是必须要half消息进入到RocketMQ内部的RMQ_SYS_TRANS_HALF_TOPIC的comsumeQueue文件中,此时就认为half消息写入成功了,然后就会返回成功消息给订单系统了。

2、RocketMQ 中的事务,它解决的问题是,确保执行本地事务和发消息这两个操作,要么都成功,要么都失败。并且,RocketMQ 增加了一个事务反查的机制,来尽量提高事务执行的成功率和数据一致性。

3、MQ发送失败,抛异常,走回滚就行,不管是不是跨服务,都可以正常回滚。如果用RocketMQ事务 mysql更新失败,half消息回滚,相当于MQ不发。mysql更新成功,MQ发送失败,他会一直尝试发送,不用回滚。默认5小时重试16次。

rocketmq批量拉取(rocketmq批量拉取消息)-图3

4、事务消息是否对消费者可见完全有本地事务执行器返回的确认消息决定。如果迟迟收不到确认消息,MQ会使用事务回查机制。

RocketMQ问题集

扩容还解决不了的问题,还存在挤压现象,就要考虑broker 或client本身的故障 这种情况基本上是可以确定是RocketMQ本身的故障照成的,比如Broker故障,比如Broker的GC频率过高导致消息推送,copy性能降低,集群内部网络故障,等等。

从 RocketMq-Console-Ng 查看 topic 消费情况,sitVasGroup 这个消费组确实没有消费到 sitServicePayTopic 的消息。

RocketMQ是一种分布式消息系统,队列没有分配是配置问题或网络问题导致的:检查配置文件是否正确,确保队列名称是否正确,网络是否配置正确。检查网络是否连通,确保Broker和Producer/Consumer之间的网络连通性。

最近在一项目中使用RocketMQ,开始配置好服务都正常使用。

几乎所有的电商都会选择消息队列来解决类型的系统耦合的问题。这时候引入rocketMQ憨,订单系统在有一个新订单时,发送一条消息到rocketMQ的topic中,所有下游系统都订阅topic,这样每个下游可以根据订单消息来做相应的处理。

很重要一点,rocketMq中没有把具体业务异常往client端抛,而是都封装起来通过错误码作为结果给到客户端,除了发生了Netty网络通信的异常。

RocketMQ原理解析

就是必须要half消息进入到RocketMQ内部的RMQ_SYS_TRANS_HALF_TOPIC的comsumeQueue文件中,此时就认为half消息写入成功了,然后就会返回成功消息给订单系统了。

这其实就是RocketMQ集群化部署抗下高并发的主要原理,当然,具体怎么做才能让系统的流量分散在RocketMQ部署的多台机器上,这个以后再找机会做一个比较详细的分享,今天主要先讲大体上的一个架构原理。

RocketMQ就是把内存中使用的那个队列,变成一个独立的、大家都可以用的队列系统。一个业务事件,是整个MQ领域最核心的概念,无论是生产还是消费都是针对Topic进行操作。

普通发送的技术原理 RocketMQ中除了顺序消息外,还支持事务消息和延迟消息,非这三种特殊的消息称为普通消息。

其实现原理是,事务消息开始是Prepare状态,RocketMQ会将其持久化到本地Mysql中,然后如果收到确认消息,就删除掉这条prepare消息,如果迟迟收不到确认消息,那么RMQ会定时的扫描prepare消息,发送给produce group进行回查确认。

也可根据返回的offsetMsgId,解析出ip,端口和CommitLog中的物理消息偏移量,直接去CommitLog中取数据。

RocketMQ的关键特性

1、在RocketMQ中,这种正常情况下无法被消费的消息被称为死信消息(Dead-Letter Message),存储死信消息的特殊队列称为死信队列(Dead-Letter Queue)。

2、不仅Topic必须一致,tags也必须一致,具体原因可以参考上面的链接,大致是因为RocketMQ会检索最后一个注册的Consumer的监听策略,之前的会失效。

3、RocketMQ的关键特性 消息的顺序 消息的顺序指的是消息消费时,能按照发送的顺序来消费。例如:一个订单产生了 3 条消息,分别是订单创建、订单付款、订单完成。消费时,要按照这个顺序消费才有意义。

4、引入的目的主要是提高消息消费的性能,由于RocketMQ是基于主题topic的订阅模式,消息消费是针对主题进行的,如果要遍历commitlog文件中根据topic检索消息是非常低效的。Consumer即可根据ConsumeQueue来查找待消费的消息。

RocketMQ和Kafka到底选哪个

而且RocketMQ是利用java开发的,符合国内的大多数公司的技术栈,很容易进行阅读源码和修改其内容。 缺点: RocketMQ的官方文档相比较于kafka和RabbitMQ来说的话会相对简单一些,没有人家kafka和RabbitMQ的文档写的详细。

RocketMQ身出名门,但使用者不多,生态较小,毕竟消息量能达到这种体量的公司不多,你也可以直接去购买阿里云的消息服务。Kafka生态完善,其代码是用Scala语言写成,可靠性比RocketMQ低一些。

而rocketMQ恰恰相反,由于所有topic的数据都是记录在一个文件当中,所以topic较少时性能相比kafka交慢,但topic较多时,rocketmq的性能几乎时没有影响的。

在单机可靠性方面,RocketMQ综合表现优于Kafka。

当今市面上有很多主流的消息中间件,如老牌的ActiveMQ、RabbitMQ,炙手可热的Kafka,阿里巴巴自主开发RocketMQ等。

kafka是依靠Zookeeper进行集群选举的,在rocketMQ的同样位置上是NameServer,这个Nameserver仅仅是注册服务,没有选举能力。每个broker都和NameServer进行连接,通过心跳维持状态。

到此,以上就是小编对于rocketmq批量拉取消息的问题就介绍到这了,希望介绍的几点解答对大家有用,有任何问题和不懂的,欢迎各位老师在评论区讨论,给我留言。

本站非盈利性质,与其它任何公司或商标无任何形式关联或合作。内容来源于互联网,如有冒犯请联系我们立删邮箱:83115484#qq.com,#换成@就是邮箱

转载请注明出处:https://www.huaxing-cn.com/jsyf/35918.html

分享:
扫描分享到社交APP
上一篇
下一篇