RocketMQ源码学习-Producer启动流程
前言
最近正好在研究RocketMQ,因此打算写一些相关的博文,这是第一篇关于Producer的博客
Producer的启动流程
一个简单的Demo
1
2
3
4
5
6
7
8
9
10
11
12
/*
- 指定一个全局唯一的Group
/
DefaultMQProducer producer = new DefaultMQProducer(“hello-group”);
/ - 指定name server的地址,可以是多个,分号分隔
/
producer.setNamesrvAddr(“localhost:9876”);
/ - 启动
*/
producer.start();
内部如何工作?
接下来我们就尝试搞清楚上面那坨代码具体都干了哪些东西:
1
2
3
4
5
6
7
8
9
10
11
12
/*
* 构造函数
*/
public DefaultMQProducer(final String producerGroup, RPCHook rpcHook) {
this.producerGroup = producerGroup;
defaultMQProducerImpl = new DefaultMQProducerImpl(this, rpcHook);
}
public void start() throws MQClientException {
//将所有的调用都交给这个哥们去做
this.defaultMQProducerImpl.start();
}
可以看到DefaultMQProducer只是一个门面类,具体的实现都是由DefaultMQProducerImpl去做的:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
//默认的状态,是否可以用volatile修饰?
private ServiceState serviceState = ServiceState.CREATE_JUST;
public void start() throws MQClientException {
this.start(true);
}
public void start(final boolean startFactory) throws MQClientException {
switch (this.serviceState) {
case CREATE_JUST:
this