producer.start()方法流程
一、先判斷serviceState是否為CREATE_JUST,只有此狀態(tài)才啟動Producer服務。若是則啟動服務,將狀態(tài)由CREATE_JUST改為START_FAILED,為防止啟動多個Producer
二、檢驗producerGroupName,方法checkConfig()
是否為null,格式是否正確,長度是否小于255,是否為默認的DEFAULT_PRODUCER
三、設置instanceName
?????? 若groupName與CLIENT_INNER_PRODUCER不匹配,且instanceName=DEFAULT,則獲取正在運行的java虛擬機名稱(格式:pid@hostname)取pid值賦予instanceName
四、構建MQClientInstance對象mQClientFactory;
MQClientManager.getInstance().getAndCreateMQClientInstance(this.defaultMQProducer, rpcHook);
?? 1、生成clientId(客戶端IP@instanceName)
?? 2、判斷factoryTable中是否有MQClientInstance實例,factoryTable.get(clientId)
3、若存在直接返回,若不存在則創(chuàng)建,流程如下:
???? 1)