一:Dubbo是什么?有什么用途??
使用Dubbo可以将应用分布到多个服务器上,当有访问时,Dubbo有帮你管理自动将请求分配给合适得到服务器去执行,即建立多个生产者,建立多个消费者,自动匹配生产者与消费者,以便达到负载均衡。关于集群与负载均衡的一些概念的简单解释也可以参考《大话集群和负载均衡》
二:Dubbo与Zookeeper的安装
1:官网 【https://www.apache.org/dyn/closer.cgi/zookeeper/ 】下载Zookeeper稳定版
2:官网【 http://dubbo.apache.org/en-us/ 】去 github 下载稳定版,()
2:解压Zookeeper到目录【D:\Zookeeper】修改目录【D:\Zookeeper\zookeeper-3.4.12\zookeeper-3.4.12\conf】 下的【 zoo_sample.cfg 】文件为【zoo.cfg】
3:点击【D:\Zookeeper\zookeeper-3.4.12\zookeeper-3.4.12\bin】目录下的【 zkServer.cmd】启动Zookeeper,显示如下即成功
4:参考《 solr服务器搭建与Tomact整合及使用 》配置一台专门管理的Dubbo服务器
5:配置好后,将 Dubbo-admin的 war 包解压放到你给Dubbo配置的服务器的根目录下【D:\Tomact\apache-tomcat-8.0.53-dubbo\webapps\ROOT】war包可以自己导入下载的Dubbo的maven文件生成。这是我生成的2.6.0版本的war包。链接:https://pan.baidu.com/s/1WHJKemdyLb8Sveq7a1PCuw 密码:1w2w
6:然后启动 Tomact-Dubbo 服务器,启动时一定要保持Zookeeper开启。然后等带启动成功。打开浏览器输入你配置的端口
注意:第一次输入的时候会让你登陆,Dubbo默认的用户名是root 密码是root
以后就可以在这里管理生产者和消费者了。
三:Dubbo的具体使用
Dubbo的主要作用就是帮助将服务发布到集群中,
1:Dubbo的执行过程:
官方手册给出的架构如图所示 http://dubbo.apache.org/en-us/docs/user/preface/architecture.html
0:服务容器负责启动,加载,运行服务提供者
1:服务提供者在启动时,向注册中心注册自己提供的服务,我们采用的注册中心就是Zookeeper。
2:服务消费者在启动时,向注册中心订阅自己所需的服务。
3:注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。
4:服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。
5:服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心。
2:Dubbo分布式在代码中的体现:
采用分布式的架构,对于代码来说,我们需要对代码结构进行拆分,一般都使用Maven进行,可以参考《 Maven的继承与聚合——多模块开发 》,拆分后每一部分基本内容不会改变,改变的是需要在每一个拆分的单元中根据其需要加入需要的Dubbo成分,接下来就针对拆分后不同的角色进行实例:
3:Dubbo发布服务:
即上述途中的步骤:1 即对于服务提供者
首先创建一个maven项目dubbo-demo-provider
pom.xml加入依赖:
1 <dependencies> 2 <dependency> 3 <groupId>com.alibaba</groupId> 4 <artifactId>dubbo</artifactId> 5 <version>2.6.0</version> 6 </dependency> 7 <dependency> 8 <groupId>com.101tec</groupId> 9 <artifactId>zkclient</artifactId> 10 <version>0.10</version> 11 </dependency> 12 <dependency> 13 <groupId>org.apache.curator</groupId> 14 <artifactId>curator-framework</artifactId> 15 <version>4.0.1</version> 16 </dependency> 17 <dependency> 18 <groupId>com.alibaba</groupId> 19 <artifactId>fastjson</artifactId> 20 <version>1.2.46</version> 21 </dependency> 22 <dependency> 23 <groupId>log4j</groupId> 24 <artifactId>log4j</artifactId> 25 <version>1.2.17</version> 26 </dependency> 27 <dependency> 28 <groupId>org.slf4j</groupId> 29 <artifactId>slf4j-api</artifactId> 30 <version>1.7.25</version> 31 </dependency> 32 <dependency> 33 <groupId>org.apache.commons</groupId> 34 <artifactId>commons-lang3</artifactId> 35 <version>3.4</version> 36 </dependency> 37 <dependency> 38 <groupId>io.netty</groupId> 39 <artifactId>netty-all</artifactId> 40 <version>4.0.35.Final</version> 41 </dependency> 42 </dependencies>