分布式服务是个很大的概念,也许你正纠结于能够从哪下手学习这门“技术”,甚至你已经拿到了alibaba 分布式服务框架的源代码,并稍微阅读了下dubbo 用户指南,但迟迟没有去研究它或者不知如何下手。造成这种情况的原因不难理解,一是你认为它很复杂,没人指点你可能开不了端,可能你拿到源码确编译总有错误,二是你没有认真读完 dubbo 用户指南,同时缺少技术了解广度,三是你所在的公司没有用到类似的框架。
本人是在公司看了使用的类似的框架源码后,并加入 dubbo技术群请教一些幼稚的问题后给自己一些信心后,终于对 dubbo 开了个端。废话不多说,来真的。
首先,我强烈建议你用 idea 并熟悉 maven,从 github 拉下来的代码模块如下:
通读 dubbo 用户指南后,发现整个框架由Register+Service/Provider+Consumer+Monitor组成,作为高性能的 分布式RPC方案,里面自然充斥着各种通讯协议,如 duddo 协议、http、rmi、hessian、ws 等,以及用于分布式的负载均衡算法-随机、最少调用、一致性 hash,还有集群容错机制-failover,failfast,failsafe,failback,forking。奥,对了,dubbo 协议是 dubbo封装的高性能 NIO 通讯协议。
没有 Register, 那 consumer 就是直连 provider,这样不太好玩。用户指南上提了几种注册中心实现方式,推荐 zookeeper 方式,不要因为完全不了解 zk 就不往下玩了。
从 zookeeper 官网下载最新版 zookeeper-3.4.7.tar.gz,解压后Linux 和 Windows 均适用,进入 conf 目录将 zoo-sample.cfg改名为 zoo.cfg,然后进入 bin 启动 zk 服务:
linux: ./zkServer.sh start 提示Starting zookeeper ... STARTED表示成功启动。
现在我们在 idea 里什么都不用做,直接用 tomcat 启动 dubbo-demo,浏览器打开后已 root/root 登录显示如下
现在我们启动服务,把 dubbo-demo 下 provider 里 test 下dubbo.properties 里的
dubbo.registry.address=multicast://224.5.6.7:1234 改为 dubbo.registry.address=zookeeper://127.0.0.1:2181 启动 main 方法便能启动 provider,同样修改配置后启动 consumer,控制台输出: 00:36:01] Hello world4821, response form provider: 192.168.1.7:20880
表示调用成功。admin 显示如下:
OTHER:
判断 zookeeper 有没有启动:
localhost:zookeeper-3.4.7 javahongxi$ ./bin/zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper-3.4.7/bin/../conf/zoo.cfg
Mode: standalone