RocketMQ一些事情

1、RocketMQ如何保证消息队列按照顺序执行
原因:是因为发送消息的时候,消息发送默认是会采用轮询的方式发送到不通的queue(分区),而消费端消费的时候,是会分配到多个queue的,多个queue是同时拉取提交消费
如图所示:

RocketMQ一些事情_第1张图片


 

实现步骤:
如果控制发送只能依次发送到同一个queue上,然后消费时候一个队列只会被一个消费者消费的原则,也只从这个queue上拉取,就保证了顺序性
如果消费端也不控制,也会导致不按顺序执行


消费端处理问题--串行执行策略
RokcetMQ的完成顺序性主要是由3把琐来实现的。下图是RocketMQ顺序消费的工作原理:

RocketMQ一些事情_第2张图片

1、消费端在启动时首先会进行队列负载机制,遵循一个消费者可以分配多个队列,但一个队列只会被一个消费者消费的原则。

2、消费者根据分配的队列,向 Broker 申请琐,如果申请到琐,则拉取消息,否则放弃消息拉取,等到下一个队列负载周期(20s)再试。

3、拉取到消息后会在消费端的线程池中进行消费,但消费的时候,会对消费队列进行加锁,即同一个消费队列中的多条消息会串行执行

4、在消费的过程中,会对处理队列(ProccessQueue)进行加锁,保证处理中的消息消费完成,发生队列负载后,其他消费者才能继续消费。

2、Rocketmq高可用搭建
要保证高可用,技术方案如图所示:

RocketMQ一些事情_第3张图片

RocketMQ一些事情_第4张图片


RocketMQ是通过broker主从机制来实现高可用的。相同broker名称,不同brokerid的机器组成一个broker组,brokerId=0表明这个broker是master,brokerId>0表明这个broker是slave。

Master角色的 Broker 支持读和写,Slave 角色的 Broker 仅支持读,也就是Producer只能和Master角色的Broker连接写入消息;Consumer可以连接Master 角色的 Broker,也可以连接Slave角色的Broker 来读取消息。
 
(1)、集群部署模式多台NameServer+多台主备的broker(Master Broker和Slave Broker)+主从同步复制+异步刷盘

 

你可能感兴趣的:(rocketMQ,rocketmq)