项目地址:
https://github.com/FateSolo/Dubbo-Test
目录:
- 0. 序
- 1. Maven构建项目
- 2. Gradle构建项目
- 3. 搭建Spring + Dubbo框架
- 4. 支持RESTful Remoting
- 5. Dubbo服务集群
- 6. ZooKeeper集群
- 7. Nginx + Tomcat集群
- 8. Redis共享session
在本章将测试Dubbo的服务集群功能。
1. 服务打包
将dubbo-server打成jar包,然后用java -jar命令运行。
1) 打开dubbo-server下的build.gradle,增加如下代码:1
2
3
4
5
6
7
8
9
10
11
12
13task 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服务此时拥有四个提供者:
分别是本机和虚拟机的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日