本博客不会解释Dubbo是什么、它的发展历史、它能做什么、为什么要和zookeeper一起用,我也解释不了。只是简单地搭建一下服务并使用它。
工具
- zookeeper-3.4.11 必需
- dubbo-admin-2.6.0 非必需,但很有必要
- dubbo-parent 示例代码 必需
步骤(仅在windows系统操作)
- 解压zookeeper,复制$ZOOKEEPER_HOME/conf/zoo.sample.cfg文件为zoo.cfg,并修改zoo.cfg文件中的dataDir修改为安装目录下的data/zookeeper目录(data目录是不存在在,不用创建,zookeeper会自行创建),比如我的就修改为dataDir=D:/software-dev/zookeeper-3.4.11/data/zookeeper
- 双击$ZOOKEEPER_HOME/bin/zkServer.cmd以启动服务(linux系统执行zkServer.sh来启动);
- 把dubbo-admin.war放到tomcat中运行访问,用户名密码为root/root,可以看到没有任何服务运行;
- 导入dubbo-parent项目至开发工具
- 运行服务提供端,启动dubbo-provider(可放到tomcat中运行,也可执行src/main/java/ProviderStarter来启动,建议后者,只为这里只是演示),再次在dubbo-admin中可以看到有一个服务,点击进去可以看到服务提供者的主机名及ip、提供的方法;
- 执行dubbo-consumer的测试类test.bshf.dubbo.demo.DubboConsusmerTest,就可以看到输出;
- 演示结束。
说明
- dubbo-parent项目说明,其下有5个模块dubbo-consumer(消费者)、dubbo-provider(提供者)、dubbo-service-api(接口类)、dubbo-entity(接口类使用的参数和返回值)、dubbo-service(业务实现类)。使用关系是dubbo-consumer使用dubbo-service-api和dubbo-entity,dubbo-provider使用dubbo-service-api和dubbo-entity和dubbo-service。业务实现类在提供者,消费者只使用提供者公开的接口类。
- zookeeper可以去官网下载,我是从https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/zookeeper-3.4.11/zookeeper-3.4.11.tar.gz下载的,在此就不提供文件。
- dubbo-admin的获取,我是使用源码安装的,官网https://github.com/apache/incubator-dubbo的此时最新版本(2018年04月10日)的2.6.1版本中没有了dubbo-admin,在2.6.0版本中找到了。打包完成得到dubbo-admin.war。现提供两种获取途径:
- 下载我打包好的,地址在https://gitee.com/valuetodays/ellen/tree/master/blog-attachment/eblog/20180410
- 自行下载源码打包(打包时间很长的,做好心理准备),命令分别是下载(
git clone https://github.com/apache/incubator-dubbo.git
)、切换到dubbo-2.6.0标签上(git checkout -b dubbo-2.6.0 dubbo-2.6.0
)、打包(mvn clean package -DskipTests)。 - 建议源码打包
额外
通过使用dubbo-consumer会发现我们只使用了提供者公开的接口类就能调用了,而众所周知java中没有办法实例化一个接口的……同样地情况也出现在了MyBatis中,MyBatis也是只提供一个接口(如UserDAO)就让业务类(如UserService)调用……不用多说,它们用的都是代理。