consumer與NameServer Broker之間的通訊
先看一下MQClientInstance的startScheduledTask方法,裡面有很多定時任務
MQClientInstance.this.mQClientAPIImpl.fetchNameServerAddr(); 定期擷取NameServer地址 周期是2分鐘
MQClientInstance.this.updateTopicRouteInfoFromNameServer(); 定期更新topicroute資訊 周期是pollNameServerInteval 這個可以配置
MQClientInstance.this.cleanOfflineBroker(); MQClientInstance.this.sendHeartbeatToAllBrokerWithLock();
清除斷線的broker,向broker發送心跳,周期是heartbeatBrokerInterval 可配置,
MQClientInstance.this.persistAllConsumerOffset();
MQClientInstance.this.adjustThreadPool();
MQClientInstance.sendHeartbeatToAllBrokerWithLock();
這個發送心跳是在DefaultMQPushConsumer start啟動的過程中和DefaultMQPushConsumer subscribe訂閱topic 都會發送心跳,逾時時間3秒
consumer訂閱topic
訂閱的資訊記錄在RebalanceImpl一個map中,ConcurrentHashMap<String /* topic */,SubscriptionData>
這個RebalanceImpl在消費訊息的時候解釋
consumer消費訊息
consume消費有2種模式 push 和 pull 本質都是pull,push是封裝了pull的過程,然後推送到監聽器,
消費service ConsumeMessageService,有2個子類,ConsumeMessageConcurrentlyService和ConsumeMessageOrderlyService
註冊registerMessageListener有2中類型,
如果是MessageListenerConcurrently,MessageService就是ConsumeMessageConcurrentlyService
如果是MessageListenerOrderly,MessageService就是ConsumeMessageOrderlyService
是一一對應的。
待寫。。。