RocketMQ详细笔记与浅解

1、什么是RocketMQ?

        RcoketMQ是一个开源的分布式消息中间件:它支持事务消息、顺序消息、批量消息、定时消息、消息回溯等;

2、RocketMQ的特点有哪些

        它是一个队列消息模型的中间件,具有:高可靠、高性能、高实时、分布式等;

        它的生产者(producer)与消费者(consumer)都可以做分布式;

        能够严格保证顺序消息:

                必须保证同一topic,同一线程,同一queue;

        支持两种消费模式:(不管是pull和push底层实现都是pull(见源码))

                pull: consumer去broker拉取消息

                push:broker推给consumer

3、RocketMQ中的角色

        namesrv:充当注册中心的作用,可以部署多个,相互之间独立,其他角色同时向多个NameServer机器上报状态信息,从而达到热备份的目的。 NameServer本身是无状态的,也就是说NameServer中的Broker、Topic等状态信息不会持久存储,都是由各个角色定时上报并 存储到内存中的(NameServer支持配置参数的持久化,一般用不到);

4、RocketMQ怎么保证消息不丢失

               保证消息不丢失分为三个阶段:

        (1)、producer发消息到broker中时,broker给producer一个消息确认回执

        (2)、消息到broker后数据进行持久化,持久化方式有两种:同步/异步

        (3)、consumer去拉取消息后给broker一个消息确认回执,broker得到确认回执后才认为这条消息被消息掉了

        如图:

 5、RocketMQ如何处理消息积压

        当MQ积压消息时,consumer消费会出现消费不动的情况;所以在处理这个问题之前,应该先保证整个流程的正常流转;

处理步骤:

                1)先开一个queue,让producer断开之前的积压queue,往新的queue里发送消息,再让consumer去新的queue里消费,这样就保证了流程的正常流转。

                2)新建一个consumer/producer(中转),让它去把积压queue里的消息读出来,然后再开一个queue/临时存储,把从积压队列里的消息读出来转到新queue/临时存储,再让consumer去消费;

        如图:

 6、RocketMQ如何保证顺序消费

        两种情况:

                1)(不考虑网络因素)producer发消息到队列时就按顺序发送,队列是保证FIFO的;当然这种情况前提条件是:同一topic、同一queue、同一线程、对应一个消费者;

                2)当producer发送消息不能保证顺序时,比如网络波动,消息1先发送,消息2后发送,但因为网络原因,消息2先到队列时这种情况;       

                        处理方案:当消费者读到消息2 后把消息2存到数据库,不执行业务流程;

                                再去读消息1,当消息1被消费后,从数据库中查消息2的状态,查到有消息2就执行消息2的业务流程,没有查到就不管;(这种业务场景是在必须保证顺序消费的情况下)

如图:

 7、RocketMQ重复消费问题

        重复消费问题是在queue到消费者之间的,当一条消息被消费者消费后给回执时出现异常(宕机,网络等因素)时,queue没收到消费者的回执,从而导致queue人为这条消息没有被消费,重新发给消费者,这就是重复消费的问题;

        解决方案:

 

当消费者消费掉一条消息后,存储到数据库或者redis中,当消息过来时,先去数据库或者redis中查询这条数据是否被消费过,如果没有消费就消费,如果有就不用管了;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值