Dubbo初体验
摘要
- 官网地址,官网有完整的资料以帮助使用者快速熟悉dubbo,不过目前相关下载地址已经失效,代码已经迁移到github,请参看下面的代码地址,自行编译打包
dubbo代码地址
2.5.4(官方版本),基于spring3.2.16.RELEASE
2.8.4(第三方基于2.5.3修改),基于spring3.2.9.RELEASE,项目名称为dubbox,但生成的包名依然是dubbo
git、maven、jdk、tomcat、nexus请自行安装,我安装的版本如下
git version 2.9.3
Apache Maven 3.3.9
java version “1.8.0_31”
tomcat version 8.5.4
nexus version 2.5.0-04
编译打包
以dubbo2.8.4为例
cd dubbox
mvn clean package install -Dmaven.test.skip=true
发布dubbo2.8.4到nexus的3rd party仓库
登录nexus,设置3rd party的Deployment Policy=Allow Redeploy(在Configuration中配置)
vi ~/.m2/settings.xml,在servers中增加如下配置
1 | <server> |
修改dubbox的pom.xml,增加如下配置
1 | <distributionManagement> |
mvn clean package deploy -Dmaven.test.skip=true
发布dubbo2.5.4到nexus的3rd party仓库
因为目前2.5.4是Snapshots版本,所以不能直接发布到3rd party中,如果要发布到3rd party,需要修改pom.xml,去掉版本号中的Snapshots,比如在intellij IDEA中,使用快捷键Command+Shift+R;
dubbo包含四个组件
-
Provider: 暴露服务的服务提供方。这里我们自己提供(基于2.8.4);
-
Consumer: 调用远程服务的服务消费方。这里我们自己提供(基于2.8.4);
-
Registry: 服务注册与发现的注册中心。这里使用zookeeper;
-
Monitor: 统计服务的调用次调和调用时间的监控中心。这里介绍两个,一个是dubbo提供的dubbo-monitor-simple,另一个是第三方对dubbo-monitor-simple的改进版本:改版的monitor(基于2.8.4)
下面分别介绍:顺序为Registry,Provider,Consumer,Monitor。
ZooKeeper Registry注册中心
下载安装
1 | $ wget http://apache.fayea.com/zookeeper/zookeeper-3.4.9/zookeeper-3.4.9.tar.gz |
配置
$ vi conf/zoo.cfg
1 | tickTime=2000 |
集群配置
-
分别在两台主机上按上述方法安装zookeeper,比如两台主机的IP分别为192.168.37.144、192.168.37.143;
-
分别在两台主机的zoo.cfg中增加如下配置
1 | server.1=192.168.37.144:2555:3555 |
-
在144主机的dataDir指定的目录(/usr/local/zookeeper-3.4.9/data)下创建文件myid
vi myid
设置内容为1 #就是zoo.cfg中server.后面对应的数字
-
同理将143的myid文件中内容设置为2
开放端口
-
两台主机分别开放2181,2555,3555端口
vi /etc/sysconfig/iptablse,加入如下内容
1 | #zookeeper |
-
重启iptables
启动与关闭zookeeper
./bin/zkServer.sh start
./bin/zkServer.sh stop
查看在zookeeper中注册的信息
echo dump | nc 192.168.37.144 2181
OR
telnet 192.168.37.144 2188
dump
关于Provider&Consumer,阿里官方的实例很详细了,网上也有很多资料,这里只做简单的说明,示例项目依赖于dubbo2.8.4,spring替换为4.3.3,使用中并未见异常,示例源码地址:https://github.com/hanqunfeng/DubboStudy
Provider 服务提供者
1 |
|
不同的Provider之间可以使用相同的应用名称(比如这里是name=“demo-provider”),因为注册的服务只基于服务所在服务器的ip地址和dubbo协议开放的端口号,两者有一个不相同即可,但是不建议这样做。
对于提供相同服务的Provider,也就是副本(同一个war包,部署到不同主机),则可以不去修改name,但是对于提供不同服务的Provider,不要使用相同的name,这样不便于在monitor中查看。
对于同一个Provider,要在同一台主机中部署(同一个war包,部署到同一台主机),则需要修改duboo协议端口,比如示例代码中的dubbo-provider和dubbo-provider02,因为两者提供相同的服务,所以应用名称相同,但是因为都在本机部署,所以一个用20880,一个使用20881
Consumer 服务消费者
1 |
|
Consumer和Provider如果部署在同一台主机,可以使用相同的dubbo协议端口,两者不受影响
关于相关配置属性的说明,还是参考官方资料吧,在dubbo源码中已经包含了Consumer和Provider的示例,可以作为参考。
Monitor
dubbo-monitor-simple 简易监控中心
-
dubbo项目源码中已经自带了一个Monitor,就是dubbo-monitor-simple,使用maven编译后,会在dubbox/dubbo-simple/dubbo-monitor-simple/target下生成dubbo-monitor-simple-2.8.4-assembly.tar.gz
-
将dubbo-monitor-simple-2.8.4-assembly.tar.gz拷贝的合适的地方并解压
1 | $ tar -zxvf dubbo-monitor-simple-2.8.4-assembly.tar.gz |
-
主要修改zookeeper地址、端口、绘图目录(该目录必须手工创建,比如这里是/Users/hanqunfeng/monitor):
1 | dubbo.container=log4j,spring,registry,jetty |
-
启动与关闭
./bin/start.sh
./bin/stop.sh
-
浏览器访问
http://localhost:8085
,图表中的效果是注册了Provider,Consumer的效果
改版的monitor(基于2.8.4)
-
特点:使用mysql作为数据存储,界面使用bootstrap进行优化
-
下载
1 | $ git clone http://git.oschina.net/handu/dubbo-monitor |
-
配置
vi src/main/resources/application.properties,修改zookeeper地址,端口,数据库信息
1 | dubbo.application.name=dubbo-monitor |
-
数据库初始化
创建monitor数据库
执行sql目录下的create.sql
-
打包
mvn clean package -Dmaven.test.skip=true
基于本地nexus编译打包时,提示找不到jetbrick-template-2.0.10.jar,去maven中央仓库下载再上传到nexus中吧。
-
部署
将生成的dubbo-monitor.war包部署到tomcat中,启动tomcat(端口8084)
访问地址http://localhost:8084/dubbo-monitor
最后说一下dubbo-admin,这个是dubbo官方提供的dubbo管理控制台
官方说明:管理控制台为内部裁剪版本,开源部分主要包含:路由规则,动态配置,服务降级,访问控制,权重调整,负载均衡,等管理功能。
dubbo-admin 管理控制台
dubbo项目源码中有一个模块叫做dubbo-admin
cd dubbox/dubbo-admin/src/main/webapp/WEB-INF
vi dubbo.properties
配置dubbo.registry.address=zookeeper://192.168.37.144:2181?backup=192.168.37.143:2181
编译打包,将生成的dubbo-admin-2.8.4.war部署到tomcat