我们在使用RocketMQ发送消息时,一般都会使用DefaultMQProducer,类型的代码如下:
DefaultMQProducer producer = new DefaultMQProducer("producer_group");
producer.setNamesrvAddr("42.192.50.8:9876");
try {
producer.start();
producer.send(new Message("topic", "ping".getBytes(StandardCharsets.UTF_8)));
} catch (Exception e) {
e.printStackTrace();
} finally {
producer.shutdown();
}
复制代码
上述代码中,在消息发送之前调用了start()方法,如果不调用start()方法,直接发送消息,那么会出现以下报错:

报错消息里面很明显地告知我们,目前这个DefaultMQProducer状态没有准备好,还不能发送消息。为了一探究竟,我们得去看看start()里面究竟做了什么操作呢?
我们根据源码一路走下来,可以追踪到DefaultMQProducerImpl.start(final boolean startFactor