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

posted @ 2025-11-12 23:16  vonlinee  阅读(2)  评论(0)    收藏  举报