上一章我们把生产者启动的流程和大家一起跟着源码走了一遍,现在我们来看发送消息的流程。上一章我们已经把核心接口和类关系梳理了一遍。如下图
我们今天重点看MQProducer中的send方法最终的实现。DefaultMQProducer中,send的实现最终还是调用了 defaultMQProducerImpl.send(msg); 也就是DefaultMQProducerImpl的send方法,不同出入参的send方法(方法重载)最终都调用了同一个私有方法sendDefaultImpl
private SendResult sendDefaultImpl(
Message msg,
final CommunicationMode communicationMode,
final SendCallback sendCallback,
final long timeout ) throws MQClientException, RemotingException, MQBrokerException, InterruptedException
进入这个私有方法,我们贴一些核心代码。
// 验证消息
Validators.checkMessage(msg, this.defaultMQProducer);
// 查找topic对应的路由
TopicPublishInfo topicPublishInfo =