结构
DefaultMQProducer包含了DefaultMQProducerImpl,而DefaultMQProducerImpl又包含了MQClientInstance。
start
start的逻辑主要在MQClientInstance,做了这四个事情:
- this.mQClientAPIImpl.start();
APIImpl主要负责对外的API请求,比如在需要获取broker状态时就需要调用APIImpl的方法来获取,APIImpl里包含一个NettyRemoteClient,用于和nameServer通讯。 - this.startScheduledTask();
启动一些定时任务 - this.pullMessageService.start();
启动拉消息服务,无论是使用push还是pull来获取消息,实际都是在pull,只是自动pull还是手动pull的区别 - this.rebalanceService.start();
消费组里的消费者会分摊队列,就是通过rebalanceService来实现
send
send的逻辑主要在DefaultMQProducerImpl中,默认是以sync的方式发布,超时时间为3s,我们主要看sendDefaultImpl方法。