《RocketMq》七、Broker中心节点
flypeng 发布时间:08-08 来源:0 浏览:0次

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的信息

如果你有好的win10资讯或者win10教程,以及win10相关的问题想要获得win10系统下载的关注与报道。
欢迎加入发送邮件到657025171#qq.com(#替换为@)。期待你的好消息!