this.setTags(tags);
if (keys != null && keys.length() > 0)
this.setKeys(keys);
this.setWaitStoreMsgOK(waitStoreMsgOK);
}
消息生产者相关代码都是在client
模块中,DefaultMQProducer
该类为默认的消息生产者实现类,它继承了ClientConfig
同时实现了MQProducer
接口。对于RocketMQ,生产者就是发送消息的客户端,所以在发送消息前需要初始化对应的实例来进行消息的发送。
public class DefaultMQProducer extends ClientConfig implements MQProducer {
…
}
类图关系如下所示:
DefaultMQProducer
的相关属性如下所示:
/**
- 生产者所属组
*/
private String producerGroup;
/**
- 默认的topicKey
*/
private String createTopicKey = MixAll.AUTO_CREATE_TOPIC_KEY_TOPIC;
/**
- 默认主题中的Broker队列的数量
*/
private volatile int defaultTopicQueueNums = 4;
/**
- 消息发送默认超时时间为3s
*/
private int sendMsgTimeout = 3000;
/**
- 消息体大小超过默认值则需要进行压缩,此处默认为4K
*/
private int compressMsgBodyOverHowmuch = 1024 * 4;
/**
- 同步方式发送消息的重试次数,默认为为2次,总共会执行3次
*/
private int retryTimesWhenSendFailed = 2;
/**
- 异方式发送消息的重试次数,默认为为2次
*/
private int retryTimesWhenSendAsyncFailed = 2;
/**
- 消息重试时选择另外一个Broker,是否不等待存储结果就进行返回,默认为false
*/
private boolean retryAnotherBrokerWhenNotStoreOK = false;
/**
- 允许发送消息的最大消息长度,默认为4M
*/
private int maxMessageSize = 1024 * 1024 * 4; // 4M
接下来,我们来一起看下消息生产者实例到底是怎么进行启动的。首先看下涉及到的主要方法调用如下所示:
我们来具体看下代码实现,首先是
public void start() throws MQClientException {
this.defaultMQProducerImpl.start();
if (null != traceDispatcher) {
try {
traceDispatcher.start(this.getNamesrvAddr());
} catch (MQClientException e) {
log.warn("trace dispatcher start failed ", e);
}
}
}
后面调用defaultMQProducerImpl中的start方法,具体分析如下所示:
public void start(final boolean startFactory) throws MQClientException {
switch (this.serviceState) {
case CREATE_JUST:
this.serviceState = ServiceState.START_FAILED;
//检查producerGroup是否符合要求
this.checkConfig();
//修改生产者的instanceName为进程的ID
if (!this.defaultMQProducer.getProducerGroup().equals(MixAll.CLIENT_INNER_PRODUCER_GROUP)) {
this.defaultMQProducer.changeInstanceNameToPID();
}
//创建MQClientInstance实例
this.mQClientFactory = MQClientManager.getInstance().getAndCreateMQClientInstance(this.defaultMQProducer, rpcHook);
//进行注册
boolean registerOK = mQClientFactory.registerProducer(this.defaultMQProducer.getProducerGroup(), this);
if (!registerOK) {
this.serviceState = ServiceState.CREATE_JUST;
throw new MQClientException(“The producer group[” + this.defaultMQProducer.getProducerGroup()
- “] has been created before, specify another name please.” + FAQUrl.suggestTodo(FAQUrl.GROUP_NAME_DUPLICATE_URL),
null);
}
this.topicPublishInfoTable.put(this.defaultMQProducer.getCreateTopicKey(), new TopicPublishInfo());
if (startFactory) {
mQClientFactory.start();
}
log.info(“the producer [{}] start OK. sendMessageWithVIPChannel={}”, this.defaultMQProducer.getProducerGroup(),
this.defaultMQProducer.isSendMessageWithVIPChannel());
this.serviceState = ServiceState.RUNNING;
break;
case RUNNING:
case START_FAILED:
case SHUTDOWN_ALREADY:
throw new MQClientException("The producer service state not OK, maybe started once, "
-
this.serviceState
-
FAQUrl.suggestTodo(FAQUrl.CLIENT_SERVICE_NOT_OK),
null);
default:
break;
}
//想所有的Broker发送心跳
this.mQClientFactory.sendHeartbeatToAllBrokerWithLock();
}
那么在MQClientManager
中进行clientId
进行生成,源码如如下所示:
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)
![img](https://i-blog.csdnimg.cn/blog_migrate/468216931f6609cc29578e7f8a67a0fd.jpeg)
最后
权威指南-第一本Docker书
引领完成Docker的安装、部署、管理和扩展,让其经历从测试到生产的整个开发生命周期,深入了解Docker适用于什么场景。并且这本Docker的学习权威指南介绍了其组件的基础知识,然后用Docker构建容器和服务来完成各种任务:利用Docker为新项目建立测试环境,演示如何使用持续集成的工作流集成Docker,如何构建应用程序服务和平台,如何使用Docker的API,如何扩展Docker。
总共包含了:简介、安装Docker、Docker入门、使用Docker镜像和仓库、在测试中使用Docker、使用Docker构建服务、使用Fig编配Docke、使用Docker API、获得帮助和对Docker进行改进等9个章节的知识。
关于阿里内部都在强烈推荐使用的“K8S+Docker学习指南”—《深入浅出Kubernetes:理论+实战》、《权威指南-第一本Docker书》,看完之后两个字形容,爱了爱了!
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
-RwI0hGoS-1713283640148)]
[外链图片转存中…(img-RxgmjGMK-1713283640149)]
[外链图片转存中…(img-VFTb4CXM-1713283640149)]
关于阿里内部都在强烈推荐使用的“K8S+Docker学习指南”—《深入浅出Kubernetes:理论+实战》、《权威指南-第一本Docker书》,看完之后两个字形容,爱了爱了!
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!