在介绍Mq生产者启动流程之前,先抛出几个个问题,带着问题去分析源码
1、消息生产者启动时具体做了什么?
2、消息生产者启动时和NameServer,Broker之间建立了什么关系?
先从启动入库着手,消息生产者启动入库方法在org.apache.rocketmq.client.impl.producer.DefaultMQProducerImpl#start(boolean)中,直接看代码
启动步骤分为六步,下面逐个说明
-
第一步,判断生产者producerGroup是否合法,没啥好说的,均为group相关参数校验
-
第二步,将默认的生产者实例名(“DEFAULT”)称替换为进程pid,代码如下
为什么要把实例名instanceName换成进程pid呢?在第三步中做说明
-
第三步,通过MQClientManager创建MQClientInstance实例,MQClientManager是一个饿汉单例模式的实现,factorytable的Map中缓存了MQClientInstance的信息,key是ClientId,ClientId怎么来的下面有分析