初识Dubbo 系列之1-Dubbo是什么

释放双眼,带上耳机,听听看~!

         
Dubbo是阿里巴巴内部的SOA服务化治理方案的核心框架,每天为2000+ 个服务提供3,000,000,000+ 次访问量支持,并被广泛应用于阿里巴巴集团的各成员站点。Dubbo自2011年开源后,已被许多非阿里系公司使用。

Dubbo[
初识Dubbo 系列之1-Dubbo是什么]是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案。

其核心部分包含:

  • 远程通讯: 提供对多种基于长连接的NIO框架抽象封装,包括多种线程模型,序列化,以及“请求-响应”模式的信息交换方式。
  • 集群容错: 提供基于接口方法的透明远程过程调用,包括多协议支持,以及软负载均衡,失败容错,地址路由,动态配置等集群支持。
  • 自动发现: 基于注册中心目录服务,使服务消费方能动态的查找服务提供方,使地址透明,使服务提供方可以平滑增加或减少机器。

Dubbo能做什么?

  • 透明化的远程方法调用,就像调用本地方法一样调用远程方法,只需简单配置,没有任何API侵入。
  • 软负载均衡及容错机制,可在内网替代F5等硬件负载均衡器,降低成本,减少单点。
  • 服务自动注册与发现,不再需要写死服务提供方地址,注册中心基于接口名查询服务提供者的IP地址,并且能够平滑添加或删除服务提供者。

快速启动

 

Dubbo采用全Spring配置方式,透明化接入应用,对应用没有任何API侵入,只需用Spring加载Dubbo的配置即可,Dubbo基于Spring的Schema扩展进行加载。

1
1
如果不想使用Spring配置,而希望通过API的方式进行调用(不推荐),请参见:API配置 (+)

1
1

服务提供者

 

完整安装步骤,请参见:示例提供者安装 (+)

1
1

定义服务接口: (该接口需单独打包,在服务提供方和消费方共享)

DemoService.java


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
1package
2           com.alibaba.dubbo.demo;
3        
4
5        
6
7
8            
9        
10
11        
12
13
14          public
15           interface
16          DemoService {
17        
18
19        
20
21
22            
23        
24
25        
26
27
28              
29          String sayHello(String name);
30        
31
32        
33
34
35            
36        
37
38        
39
40
41          }
42

在服务提供方实现接口:(对服务消费方隐藏实现)

DemoServiceImpl.java


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
72
73
74
1package
2           com.alibaba.dubbo.demo.provider;
3        
4
5        
6
7
8            
9        
10
11        
12
13
14          import
15           com.alibaba.dubbo.demo.DemoService;
16        
17
18        
19
20
21            
22        
23
24        
25
26
27          public
28           class
29          DemoServiceImpl  
30          implements
31          DemoService {
32        
33
34        
35
36
37            
38        
39
40        
41
42
43              
44          public
45          String sayHello(String name) {
46        
47
48        
49
50
51                  
52          return
53          "Hello "
54          + name;
55        
56
57        
58
59
60              
61          }
62        
63
64        
65
66
67            
68        
69
70        
71
72
73          }
74

用Spring配置声明暴露服务:

provider.xml


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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
1<?
2          xml
3          version
4          =
5          "1.0"
6          encoding
7          =
8          "UTF-8"
9          ?>
10        
11
12        
13
14
15          <
16          beans
17          xmlns
18          =
19          "http://www.springframework.org/schema/beans"
20        
21
22        
23
24
25              
26          xmlns:xsi
27          =
28          "http://www.w3.org/2001/XMLSchema-instance"
29        
30
31        
32
33
34              
35          xmlns:dubbo
36          =
37          "http://code.alibabatech.com/schema/dubbo"
38        
39
40        
41
42
43              
44          xsi:schemaLocation
45          =
46          "http://www.springframework.org/schema/beans        http://www.springframework.org/schema/beans/spring-beans.xsd        http://code.alibabatech.com/schema/dubbo         http://code.alibabatech.com/schema/dubbo/dubbo.xsd"
47          >
48        
49
50        
51
52
53            
54        
55
56        
57
58
59              
60          <!-- 提供方应用信息,用于计算依赖关系 -->
61        
62
63        
64
65
66              
67          <
68          dubbo:application
69          name
70          =
71          "hello-world-app" 
72          />
73        
74
75        
76
77
78            
79        
80
81        
82
83
84              
85          <!-- 使用multicast广播注册中心暴露服务地址 -->
86        
87
88        
89
90
91              
92          <
93          dubbo:registry
94          address
95          =
96          "multicast://224.5.6.7:1234"
97          />
98        
99
100        
101
102
103            
104        
105
106        
107
108
109              
110          <!-- 用dubbo协议在20880端口暴露服务 -->
111        
112
113        
114
115
116              
117          <
118          dubbo:protocol
119          name
120          =
121          "dubbo"
122          port
123          =
124          "20880"
125          />
126        
127
128        
129
130
131            
132        
133
134        
135
136
137              
138          <!-- 声明需要暴露的服务接口 -->
139        
140
141        
142
143
144              
145          <
146          dubbo:service
147          interface
148          =
149          "com.alibaba.dubbo.demo.DemoService"
150          ref
151          =
152          "demoService"
153          />
154        
155
156        
157
158
159            
160        
161
162        
163
164
165              
166          <!-- 和本地bean一样实现服务 -->
167        
168
169        
170
171
172              
173          <
174          bean
175          id
176          =
177          "demoService"
178          class
179          =
180          "com.alibaba.dubbo.demo.provider.DemoServiceImpl"
181          />
182        
183
184        
185
186
187            
188        
189
190        
191
192
193          </
194          beans
195          >
196

加载Spring配置:

Provider.java


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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
1import
2           org.springframework.context.support.ClassPathXmlApplicationContext;
3        
4
5        
6
7
8            
9        
10
11        
12
13
14          public
15           class
16          Provider {
17        
18
19        
20
21
22            
23        
24
25        
26
27
28              
29          public
30          static
31          void
32          main(String[] args)  
33          throws
34          Exception {
35        
36
37        
38
39
40                  
41          ClassPathXmlApplicationContext context =
42          new
43          ClassPathXmlApplicationContext(
44          new
45          String[] {
46          "http://10.20.160.198/wiki/display/dubbo/provider.xml"
47          });
48        
49
50        
51
52
53                  
54          context.start();
55        
56
57        
58
59
60            
61        
62
63        
64
65
66                  
67          System.in.read();
68          // 按任意键退出
69        
70
71        
72
73
74              
75          }
76        
77
78        
79
80
81            
82        
83
84        
85
86
87          }
88

服务消费者

 

完整安装步骤,请参见:示例消费者安装 (+)

1
1

通过Spring配置引用远程服务:

consumer.xml


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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
1<?
2          xml
3          version
4          =
5          "1.0"
6          encoding
7          =
8          "UTF-8"
9          ?>
10        
11
12        
13
14
15          <
16          beans
17          xmlns
18          =
19          "http://www.springframework.org/schema/beans"
20        
21
22        
23
24
25              
26          xmlns:xsi
27          =
28          "http://www.w3.org/2001/XMLSchema-instance"
29        
30
31        
32
33
34              
35          xmlns:dubbo
36          =
37          "http://code.alibabatech.com/schema/dubbo"
38        
39
40        
41
42
43              
44          xsi:schemaLocation
45          =
46          "http://www.springframework.org/schema/beans        http://www.springframework.org/schema/beans/spring-beans.xsd        http://code.alibabatech.com/schema/dubbo         http://code.alibabatech.com/schema/dubbo/dubbo.xsd"
47          >
48        
49
50        
51
52
53            
54        
55
56        
57
58
59              
60          <!-- 消费方应用名,用于计算依赖关系,不是匹配条件,不要与提供方一样 -->
61        
62
63        
64
65
66              
67          <
68          dubbo:application
69          name
70          =
71          "consumer-of-helloworld-app" 
72          />
73        
74
75        
76
77
78            
79        
80
81        
82
83
84              
85          <!-- 使用multicast广播注册中心暴露发现服务地址 -->
86        
87
88        
89
90
91              
92          <
93          dubbo:registry
94          address
95          =
96          "multicast://224.5.6.7:1234"
97          />
98        
99
100        
101
102
103            
104        
105
106        
107
108
109              
110          <!-- 生成远程服务代理,可以和本地bean一样使用demoService -->
111        
112
113        
114
115
116              
117          <
118          dubbo:reference
119          id
120          =
121          "demoService"
122          interface
123          =
124          "com.alibaba.dubbo.demo.DemoService"
125          />
126        
127
128        
129
130
131            
132        
133
134        
135
136
137          </
138          beans
139          >
140

加载Spring配置,并调用远程服务:(也可以使用IoC注入)

Consumer.java


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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
1import
2           org.springframework.context.support.ClassPathXmlApplicationContext;
3        
4
5        
6
7
8          import
9           com.alibaba.dubbo.demo.DemoService;
10        
11
12        
13
14
15            
16        
17
18        
19
20
21          public
22           class
23          Consumer {
24        
25
26        
27
28
29            
30        
31
32        
33
34
35              
36          public
37          static
38          void
39          main(String[] args)  
40          throws
41          Exception {
42        
43
44        
45
46
47                  
48          ClassPathXmlApplicationContext context =
49          new
50          ClassPathXmlApplicationContext(
51          new
52          String[] {
53          "http://10.20.160.198/wiki/display/dubbo/consumer.xml"
54          });
55        
56
57        
58
59
60                  
61          context.start();
62        
63
64        
65
66
67            
68        
69
70        
71
72
73                  
74          DemoService demoService = (DemoService)context.getBean(
75          "demoService"
76          );
77          // 获取远程服务代理
78        
79
80        
81
82
83                  
84          String hello = demoService.sayHello(
85          "world"
86          );
87          // 执行远程方法
88        
89
90        
91
92
93            
94        
95
96        
97
98
99                  
100          System.out.println( hello );
101          // 显示调用结果
102        
103
104        
105
106
107              
108          }
109        
110
111        
112
113
114            
115        
116
117        
118
119
120          }
121

给TA打赏
共{{data.count}}人
人已打赏
安全网络

CDN安全市场到2022年价值76.3亿美元

2018-2-1 18:02:50

安全技术

那些你不知道的Dart细节之函数(方法)(三)

2022-1-12 12:36:11

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索