RocketMQ入门到入土(四)producer生产消息源码剖析

本文详细解析了RocketMQ的Producer生产消息的核心流程。从创建`DefaultMQProducer`,设置NameServer地址,到启动Producer及其内部的`MQClientFactory`,深入探讨了消息发送的步骤,包括`send()`方法的实现。文章还涉及了设计模式,如单例、状态模式和门面模式,并提出了面试问题和时序图相关讨论。
摘要由CSDN通过智能技术生成

RocketMQ入门到入土(四)producer生产消息源码剖析

篇幅不是每一行代码都进行解析,没意义。冗余的文字你看着烦我写着也闹心,只剖析核心流程以及原理。

一、Demo
import org.apache.rocketmq.client.producer.DefaultMQProducer;
import org.apache.rocketmq.client.producer.SendResult;
import org.apache.rocketmq.common.message.Message;

/**

  • Description:

  • @author TongWei.Chen 2020-06-21 11:32:58
    */
    public class ProducerDemo {
    public static void main(String[] args) throws Exception {
    DefaultMQProducer producer = new DefaultMQProducer(“my-producer”);
    producer.setNamesrvAddr(“124.57.180.156:9876”);
    producer.start();

     Message msg = new Message("myTopic001", "hello world".getBytes());
     SendResult result = producer.send(msg);
     System.out.println("发送消息成功!result is : " + result);
    

    }
    }

二、源码剖析

1、准备工作

1.1、new DefaultMQProducer()
public DefaultMQProducer(final String producerGroup) {
this(null, producerGroup, null);
}

public DefaultMQProducer(final String namespace, final String producerGroup, RPCHook rpcHook) {
// null
this.namespace = namespace;
// my-producer
this.producerGroup = producerGroup;
// new DefaultMQProducerImpl(this, null);
defaultMQProducerImpl = new DefaultMQProducerImpl(this, rpcHook);
}

给producerGroup赋值

new DefaultMQProducerImpl()

1.2、setNamesrvAddr()
/**

  • {@link org.apache.rocketmq.client.ClientConfig}
    */
    public void setNamesrvAddr(String namesrvAddr) {
    this.namesrvAddr = namesrvAddr;
    }

给namesrv赋值

2、启动

2.1、start()
@Override
public void start() throws MQClientException {
this.defaultMQProducerImpl.start();
}

再次重申:篇幅不是每一行代码都进行解析,没意义。冗余的文字你看着烦我写着也闹心,只剖析核心流程以及原理。所以删减了无用的垃圾。

2.1.1、defaultMQProducerImpl.start()
private ServiceState serviceState = ServiceState.CREATE_JUST;

public void start(final boolean startFactory) throws MQClientException {
switch (this.serviceState) {
// 默认为CREATE_JUST状态
case CREATE_JUST:
// 先默认成启动失败,等最后完全启动成功的时候再置为ServiceState.RUNNING
this.serviceState = ServiceState.START_FAILED;
/**
* 检查配置,比如group有没有写,是不是默认的那个名字,长度是不是超出限制了,等等一系列验证。
/
this.che

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值