rocketmq重试机制_rocketmq重试日志
RocketMQ
在此之前,淘宝有一款消息中间件名为 Notify ,目前已经逐步被Metaq所取代。Metaq在阿里巴巴内部、蚂蚁金服、菜鸟等各业务中被广泛使用,接入了上万个应用系统中。并平稳支撑了历年双十一大促(万亿级的消息),在性能、稳定性、可靠性等方面表现出色,在整个阿里技术体系和大中台战略中发挥着举足轻重的作用。
rocketmq重试机制_rocketmq重试日志
rocketmq重试机制_rocketmq重试日志
Metaq最终源于Kafka,早起借鉴了Kafka很多的设计。但是由于Kafka是Scale语言编写而阿里系主要使用Ja,且无法满足阿里的电商、金融业务场景,所以誓嘉(花名)团队用Ja重新造轮子,并做了大量的改造和优化。
代的Notify主要使用了推模型,解决了事务消息;第二代的MetaQ主要使用了拉模型RocketMQ在阿里内部叫做Metaq(最早名为Metamorphosis,中文意思 变形记 ,是作家卡夫卡的中篇代表作,可见是为了致敬Kafka)。,解决了顺序消息和海量堆积的问题。相比起Kafka使用的Scale语言编写,RabbitMQ 使用Erlang语言编写,基于Ja的RocketMQ开源后更容易被广泛的研究,以及其他大厂定制开发。
执行流程:
RocketMQ 消息有两种模式,一种是Push模式(MQPushConsumer),即MQ主动向消费端推送;另外一种是Pull模式(MQPullConsumer),即消费端在需要时,主动到MQ 拉取。但在具体实现时, Push和Pull模式本质都是采用消费端主动拉取的方式 ,即 Consumer 轮询从 Broker 拉取消息。
优点:就是实时性高。
缺点:在于消费端的处理能力有限,当瞬间推送RocketMQ是Metaq3.0之后的开源版本。很多消息给消费端时,容易造成消费端的消息积压,时会压垮客户端。
Push 与 Pull 区别:
Push 方式里,Consumer 把长轮询的动作封装了,并注册MessageListener,取到消息后,唤醒MessageListener的consumeMessage()来消费,对用户而言,感觉消息是被推送过来的。
Pull 方式里,取消息的过程需要用户自己主动调用,首先通过打算消费的 Topic 拿到 MessageQueue 的,遍历MessageQueue,然后针对每个MessageQueue批量取消息,一次取完后,记录该队列下一次要取的开始offset,直到取完了,再换另一个MessageQueue。
RocketMQ 使用长轮询机制来模拟 Push 效果,算是兼顾了二者的优点。
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系 836084111@qq.com 删除。