rocketmq源码解析之name启动(一)

 

说在前面

主要解析namrsrv启动部分,namesrv配置加载、netty server创建、注册出处理器。

 

正文

源码解析namesrv启动

入口找到这个方法org.apache.rocketmq.namesrv.NamesrvStartup#main0这行代码

(controller)

进入到这个方法

org.apache.rocketmq.namesrv.NamesrvStartup#start

    NamesrvController (NamesrvController controller) Exception {

        (== controller) {
            IllegalArgumentException()}

initResult = controller.initialize()(!initResult) {
            controller.shutdown()System.(-)}

        Runtime.().addShutdownHook(ShutdownHookThread(Callable<Void>() {
            Void () Exception {
                .shutdown()}
        }))controller.start()controller}

先看这行代码

initResult = controller.initialize()

进入这个方法

org.apache.rocketmq.namesrv.NamesrvController#initialize

..load()

进入这个方法org.apache.rocketmq.namesrv.kvconfig.KVConfigManager#load

    () {
        String content = {
content = MixAll.(..getNamesrvConfig().getKvConfigPath())} (IOException e) {
            .warn(e)}
        (content != ) {
            KVConfigSerializeWrapper kvConfigSerializeWrapper =
                KVConfigSerializeWrapper.(contentKVConfigSerializeWrapper.)(!= kvConfigSerializeWrapper) {
                ..putAll(kvConfigSerializeWrapper.getConfigTable()).info()}
        }
    }

进入这个方法

.= NettyRemotingServer(..)

进入这个方法org.apache.rocketmq.remoting.netty.NettyRemotingServer#NettyRemotingServer(org.apache.rocketmq.remoting.netty.NettyServerConfig, org.apache.rocketmq.remoting.ChannelEventListener)创建netty server

    (NettyServerConfig nettyServerConfigChannelEventListener channelEventListener) {
(nettyServerConfig.getServerOnewaySemaphoreValue()nettyServerConfig.getServerAsyncSemaphoreValue()).= ServerBootstrap().= nettyServerConfig.= channelEventListenerpublicThreadNums = nettyServerConfig.getServerCallbackExecutorThreads()(publicThreadNums <= ) {
            publicThreadNums = }

.= Executors.(publicThreadNumsThreadFactory() {
            AtomicInteger = AtomicInteger()Thread (Runnable r) {
                Thread(r+ ..incrementAndGet())}
        }).= NioEventLoopGroup(ThreadFactory() {
            AtomicInteger = AtomicInteger()Thread (Runnable r) {
                Thread(rString.(..incrementAndGet()))}
        })(useEpoll()) {
            .= EpollEventLoopGroup(nettyServerConfig.getServerSelectorThreads()ThreadFactory() {
                AtomicInteger = AtomicInteger()= .getServerSelectorThreads()Thread (Runnable r) {
                    Thread(rString.(..incrementAndGet()))}
            })} {
.= NioEventLoopGroup(nettyServerConfig.getServerSelectorThreads()ThreadFactory() {
                AtomicInteger = AtomicInteger()= .getServerSelectorThreads()Thread (Runnable r) {
                    Thread(rString.(..incrementAndGet()))}
            })}

loadSslContext()}
.registerProcessor()

进入这个方法org.apache.rocketmq.namesrv.NamesrvController#registerProcessor

    () {
(.isClusterTest()) {

            ..registerDefaultProcessor(ClusterTestRequestProcessor(.getProductEnvName()).)} {

            ..registerDefaultProcessor(DefaultRequestProcessor().)}
    }

进入这个方法org.apache.rocketmq.namesrv.processor.ClusterTestRequestProcessor#ClusterTestRequestProcessor创建集群请求控制器

(NamesrvController namesrvControllerString productEnvName) {
    (namesrvController).= productEnvName= DefaultMQAdminExt().setInstanceName(+ productEnvName).setUnitName(productEnvName){
        .start()} (MQClientException e) {
        .error(e)}
}

进入这个方法org.apache.rocketmq.tools.admin.DefaultMQAdminExtImpl#start

() MQClientException {
    (.) {
        :.= ServiceState...changeInstanceNameToPID().= MQClientManager.().getAndCreateMQClientInstance(.)registerOK = .registerAdminExt(..getAdminExtGroup())(!registerOK) {
                .= ServiceState.MQClientException(+ ..getAdminExtGroup()
                    + + FAQUrl.(FAQUrl.))}

            .start().info(..getAdminExtGroup()).= ServiceState.:
        :
        :
            MQClientException(+ .+ FAQUrl.(FAQUrl.)):
            }
}
.= MQClientManager.().getAndCreateMQClientInstance(.)

进入这个方法org.apache.rocketmq.client.impl.MQClientManager#getAndCreateMQClientInstance(org.apache.rocketmq.client.ClientConfig, org.apache.rocketmq.remoting.RPCHook)

  MQClientInstance (ClientConfig clientConfigRPCHook rpcHook) {
        String clientId = clientConfig.buildMQClientId()MQClientInstance instance = ..get(clientId)(== instance) {
            instance =
                MQClientInstance(clientConfig.cloneClientConfig()..getAndIncrement()clientIdrpcHook)MQClientInstance prev = ..putIfAbsent(clientIdinstance)(prev != ) {
                instance = prev.warn(clientId)} {
                .info(clientId)}
        }

        instance}

从缓存中获取,如果缓存中没有就创建后在放到缓存中。

进入这个方法创建mqclient对象

org.apache.rocketmq.client.impl.factory.MQClientInstance#MQClientInstance(org.apache.rocketmq.client.ClientConfig, int, java.lang.String, org.apache.rocketmq.remoting.RPCHook)

(ClientConfig clientConfiginstanceIndexString clientIdRPCHook rpcHook) {
    .= clientConfig.= instanceIndex.= NettyClientConfig()..setClientCallbackExecutorThreads(clientConfig.getClientCallbackExecutorThreads())..setUseTLS(clientConfig.isUseTLS()).= ClientRemotingProcessor().= MQClientAPIImpl(..rpcHookclientConfig)(..getNamesrvAddr() != ) {
        ..updateNameServerAddressList(..getNamesrvAddr()).info(..getNamesrvAddr())}

    .= clientId.= MQAdminImpl().= PullMessageService().= RebalanceService().= DefaultMQProducer(MixAll.)..resetClientConfig(clientConfig).= ConsumerStatsManager(.).info(...MQVersion.(MQVersion.)RemotingCommand.())}

 

说在最后

本篇介绍namesrv启动源码解析,仅代表个人观点,欢迎一起讨论交流。

640?wx_fmt=gif&tp=webp&wxfrom=5&wx_lazy=1

关注“天河聊技术”公众号

640?wx_fmt=jpeg&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1

 

 

加群讨论

 

640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1&wx_co=1

转载于:https://my.oschina.net/u/3775437/blog/2254213

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值