本文主要分析RocketMQ中Producer的启动过程。
RocketMQ的版本为:4.2.0 release。
一.时序图
根据源码,把Producer启动过程的时序图画了一遍:
二.源码分析
1 start() :DefaultMQProducer启动。
DefaultMQProducer主要功能都是在DefaultMQProducerImpl中实现的。类似的,DefaultMQPushConsumer的大部分功能也在DefaultMQPushConsumerImpl中实现:
//DefaultMQProducer#start
public void start() throws MQClientException {
this.defaultMQProducerImpl.start();
}
1.1 checkConfig:检查producerGroup是否合法。
// DefaultMQProducerImpl#checkConfig
private void checkConfig() throws MQClientException {
Validators.checkGroup(this.defaultMQProducer.getProducerGroup());
if (null == this.defaultMQProducer.getProducerGroup()) {
throw new MQClientException("producerGroup is null", null);
}
if (this.defaultMQProducer.getProducerGroup().equals(MixAll.DEFAULT_PRODUCER_GROUP)) {// 不能等于"DEFAULT_PRODUCER"
throw new MQClientException("producerGroup can not equal " + MixAll.DEFAULT_PRODUCER_GROUP + ", please specify another one.",
null);
}
}
// Validators#checkGroup
public static void checkGroup(String group) throws MQClientException {
if (UtilAll.isBlank(group)) {// 不能为空
throw new MQClientException("the specified group is blank", null);
}
if (!regularExpressionMatcher(group, PATTERN)) {