RocketMQ源码-生产者
消息投递过程
以5.3.3版本为例,以源码中 org.apache.rocketmq.example.simple.Producer 这个类来作为入口
org.apache.rocketmq.client.producer.DefaultMQProducer#send(org.apache.rocketmq.common.message.Message),
@Override
public SendResult send(
Message msg) throws MQClientException, RemotingException, MQBrokerException, InterruptedException {
msg.setTopic(withNamespace(msg.getTopic()));
if (this.getAutoBatch() && !(msg instanceof MessageBatch)) {
return sendByAccumulator(msg, null, null);
} else {
// 同步直接发送
return sendDirect(msg, null, null);
}
}
sendDirect内部又是直接委托给DefaultMQProducerImpl实例的
public SendResult sendDirect(Message msg, MessageQueue mq,
SendCallback sendCallback) throws MQClientException, RemotingException, InterruptedException, MQBrokerException {
// send in sync mode
if (sendCallback == null) {
if (mq == null) {
return this.defaultMQProducerImpl.send(msg);
} else {
return this.defaultMQProducerImpl.send(msg, mq);
}
} else {
if (mq == null) {
this.defaultMQProducerImpl.send(msg, sendCallback);
} else {
this.defaultMQProducerImpl.send(msg, mq, sendCallback);
}
return null;
}
}
继续往下跟,走到:org.apache.rocketmq.client.impl.producer.DefaultMQProducerImpl#sendDefaultImpl

浙公网安备 33010602011771号