Dubbo学习笔记 五:Dubbo服务集群


项目地址:
https://github.com/FateSolo/Dubbo-Test

目录:

在本章将测试Dubbo的服务集群功能。

1. 服务打包

将dubbo-server打成jar包,然后用java -jar命令运行。

1) 打开dubbo-server下的build.gradle,增加如下代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
task copyLib(type : Copy) {
from { configurations.compile }
into('lib')
}

jar {
manifest {
attributes 'Main-Class': 'com.fatesolo.dubbo.server.service.impl.BookServiceImpl'
attributes 'Class-Path': new File('lib').list().findAll {
it.endsWith('.jar')
}.collect { "lib/$it" }.join(' ')
}
}

copyLib负责将dubbo-server的所有依赖拷贝至lib文件夹下,attributes ‘Main-Class’指定jar包运行入口,attributes ‘Class-Path’指定jar包的所有依赖,即lib文件夹下的所有jar包。

2) 打开dubbo-server.xml,修改服务配置如下:

1
2
<dubbo:service interface="com.fatesolo.dubbo.api.service.BookService"
ref="bookServiceImpl" protocol="dubbo,rest"/>

即让该服务同时使用dubbo和rest协议。

3) 进入到dubbo-server目录下,键入如下命令:

1
gradle copyLib

在dubbo-server文件夹下已经生成了lib文件夹。

4) 继续键入如下命令:

1
gradle build

在dubbo-server/build/libs文件夹下已经生成了dubbo-server-1.0-SNAPSHOT.jar。

2. 服务部署

因为资源有限,这里只在虚拟机和本机同时运行两个服务。

1) 将lib文件夹和jar包放至同一个目录,键入如下命令:

1
java -jar dubbo-server-1.0-SNAPSHOT.jar

即可在虚拟机运行第一个服务。

2) 将lib文件夹和jar包拷贝至本机,修改jar包内的dubbo-server.xml,更改注册中心地址:

1
<dubbo:registry address="zookeeper://192.168.16.151:2181"/>

也就是虚拟机的ip地址,随后可在本机运行此服务。

3. 集群测试

1) 在dubbo-admin中,可以看到com.fatesolo.dubbo.api.service.BookService服务此时拥有四个提供者:
dubbo-server-provider

分别是本机和虚拟机的7110端口和20880端口。

2) 运行dubbo-client。

3) 使用dubbo-client添加一条数据:

1
curl -d "name=Book1&author=Fate" http://localhost:8080/dubbo-client/book

4) 连续访问http://localhost:8080/dubbo-client/book ,将随机得到如下结果:

1
[{"id":1,"name":"Book1","author":"Fate"}]

或者

1
[]

会出现这种情况,是因为Dubbo的负载均衡策略缺省为random随机调用。因此添加数据被随机添加到了其中一个服务中,访问同样是随机访问其中一个服务。


作者 [@FateSolo]
2017 年 06月 03日