一、分布式的基础理论
1.分布式系统是由多个独立的计算机组成,用户去访问一个内容(网站)时感觉就是访问一个系统一样,而这样一个系统其实是由分布式组成
2.分布式下的多个独立服务会互相调用,链路复杂,而dubbo可以对独立的服务进行治理,从而保证我们整个系统有条不紊的运行
二、dubbo特性
dubbo早期是由阿里巴巴创建的,后期交给Apache并且开源
1.支持RPC接口协议调用
2.负载均衡
3.服务注册中心
4.高度横向扩展能力
5.灰度发布
6.可视化界面进行各服务实时健康监控
三、dubbo组成结构及交互原理
1.首先provider(后端服务)向注册中心暴露自己的接口注册到注册中心
2.consumer(发起后端服务调用者)向注册中心发起订阅去寻找自己要调用的服务
3.注册中心通知consumer需要调用后端服务的接口地址、调用节点等信息
4.consumer通过反射机制对后端服务发起调用
5.dubbo监控中心将监控接口的调用次数及健康状况
四、dubbo框架的搭建
1.首先搭建注册中心,以zookeeper为例(官方推荐),下载zookeeper的官方包
http://repo1.maven.org/maven2/org/apache/zookeeper/zookeeper/
2.将下载的包解压后,进入zookeeper下的conf目录将zoo_sample.cfg文件改名为zoo.cfg
3.编辑zoo.cfg文件开启zookeeper客户端端口2181(默认)
4.进入zookeeper下bin目录,给文件赋予执行权限,然后开启zookeeper服务
chmod a+x *
./zkServer.sh start
5.开启dubbo服务管理控制台,在GitHub上下载dubbo-admin解压包
6.解压后进入dubbo-admin目录下找到resources/application.properties文件并修改连接zookeeper地址端口号跟zookeeper服务保持一致
图对应的server.port为后台服务对应的默认端口号要记住
7.在src目录下使用maven命令对源码进行编译打包
8.将打成的jar包,进行启动,并在浏览器输入http://ip:7001访问dubbo后台
java -jar 包名
9.将之前GitHub下载的解压包进入dubbo-monitor-simple目录执行maven编译打成jar包,并将dubbo-monitor-simple-2.0.0-assembly.tar.gz进行解压,找到conf/dubbo.properties文件并修改连接zookeeper地址端口号跟zookeeper服务保持一致
dubbo服务端口号默认7070要记住、jetty是monitor前台访问的端口号默认8080
10.并启动dubbo服务,并http://ip:8080访问monitor
./start.sh
11.代码定义provider跟consumer并且两个在不同的项目下,分别在resources下定义provider.xml、consumer.xml文件
provider.xml配置
<?xml version="1.0" encoding="UTF-8" ?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:dubbo="http://code.alibabatech.com/schema/dubbo"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd
http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
<!-- 1、指定当前服务/应用的名字(同样的服务名字相同,不要和别的服务同名) -->
<dubbo:application name="user-provider"></dubbo:application>
<!-- 2、指定注册中心的位置 -->
<!-- <dubbo:registry address="zookeeper://192.168.55.215:2181"></dubbo:registry> -->
<dubbo:registry protocol="zookeeper" address="192.168.55.215:2181"></dubbo:registry>
<!-- 3、指定通信规则(通信协议?通信端口) -->
<dubbo:protocol name="dubbo" port="20882"></dubbo:protocol>
<!-- 4、暴露服务 ref:指向服务的真正的实现对象 -->
<dubbo:service interface="com.yushi.service.UserService"
ref="userServiceImpl01" timeout="1000" version="1.0.0">
<dubbo:method name="getUserAddressList" timeout="1000"></dubbo:method>
</dubbo:service>
<!--统一设置服务提供方的规则 -->
<dubbo:provider timeout="1000"></dubbo:provider>
<!-- 服务的实现 -->
<bean id="userServiceImpl01" class="com.yushi.gamemall.impl.UserServiceImpl"></bean>
<!-- 连接监控中心 -->
<dubbo:monitor protocol="registry"></dubbo:monitor>
</beans>
1.配置zookeeper的连接地址
2.指定dubbo协议的通信规则及端口号
3.将接口进行暴露并向注册中心进行注册,通过暴露的接口建立对应的实现类
4.配置monitor的连接配置
consumer.xml配置
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:dubbo="http://dubbo.apache.org/schema/dubbo"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd
http://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd
http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd">
<context:component-scan base-package="com.yushi.gamemall.impl"></context:component-scan>
<dubbo:application name="user-consumer"></dubbo:application>
<dubbo:registry address="zookeeper://192.168.55.215:2181"></dubbo:registry>
<dubbo:reference interface="com.yushi.service.UserService"
id="userService" timeout="5000" retries="3" version="*">
<!-- <dubbo:method name="getUserAddressList" timeout="1000"></dubbo:method> -->
</dubbo:reference>
<dubbo:monitor protocol="registry"></dubbo:monitor>
</beans>
1.配置zookeeper连接地址建立连接
2.配置要订阅的接口
12.具体代码实现的demo地址如下
git@github.com:HenryXiaoPY/Demo.git