《RocketMq》七、Broker中心节点

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/xxxxxx91116/article/details/50427904

broker的位置和结构图:


由于之前已经把存储,网络分解出来进行了详细的分析,因此Broker部分变得较简单,这里主要分为以下几个部分来说:

一、Broker与NameSrv交互

Broker会不断发送register信息给NameSrv,将自身的clusterName,brokerName,topic信息发送到Namesrv;而Consumer和Producer则会通过Namesrv获取信息,这里最主要的数据结构是:

TopicConfig {
    public static int DefaultReadQueueNums = 16;
    public static int DefaultWriteQueueNums = 16;

    private static final String SEPARATOR = " ";

    private String topicName;
    private int readQueueNums = DefaultReadQueueNums;
    private int writeQueueNums = DefaultWriteQueueNums;
    private int perm = PermName.PERM_READ | PermName.PERM_WRITE;
    private TopicFilterType topicFilterType = TopicFilterType.SINGLE_TAG;
    private int topicSysFlag = 0;
    private boolean order = false;
}


二、Broker与Producer

Producer首先会从NameSrv获取所有的broker-topic-queue列表,然后向各个queue发送message,这里发送后的操作主要是在MessageStore中进行处理;

首先,将数据写入CommitLog;

其次,将信息写入DispatchMessageService,他将创建索引将信息写入ConsumerQueue和IndexService

最后,Producer会发送心跳信息,Broker会使用ProducerManager对Producer进行管理


三、Broker与Consumer

3.1 Consumer首先也会从NameSrv获取所有的broker-topic-queue列表;

3.2 Consumer获取各个broker上面的相同group-topic-broker的消费者信息

3.3其次,根据rebalance的规则,每个consumer消化broker的不同queue;

3.4再次,调用pullMessage获取消息进行消费

3.5最后,Consumer会发送心跳信息,Broker会使用ConsumerManager对Consumer进行管理


四、Schedule定时任务

Broker启动后,MQ会进行一系列的schedule服务,主要schedule如下:

1. messageStore:它的主要工作详见http://blog.csdn.net/xxxxxx91116/article/details/50333161

 
 

2. remotingServer:启动监听服务,在8888进行监听

3. brokerOuterAPI:发送的函数API

4. pullRequestHoldService:当发送的pull请求的offset大于当前queue的最大offset时,会将其放入到pullRequestTable中,当有满足条件的offset到达时,会通知客户端消息到达处理

5. clientHousekeepingService:管理consumer、producer的信息

猜你喜欢

转载自blog.csdn.net/xxxxxx91116/article/details/50427904