1.Dubbo是什么
Dubbo是一个分布式服务架构,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA(**程序的不同单元和功能通过约定的接口联系起来**)服务治理方案.
2.Dubbo能做什么?
1.透明化的远程方法调用,就想调用本地方法一样调用远程方法,只需要简单的配置, 没有任何的API入侵.
2.软负载均衡及容错机制,可以在内网代替F5等硬件负载均衡器,降低成本,减少单点.
3.服务自动注册与发现,不需要写死服务提供方地址,注册中心基于接口名查询服务提供者的IP地址,并且能够平滑添加或删除服务提供者
Dubbo架构简介
Provider: 暴露服务的服务提供方。
Consumer: 调用远程服务的服务消费方。
Registry: 服务注册与发现的注册中心。
Monitor: 统计服务的调用次调和调用时间的监控中心。
Container: 服务运行容器。
调用过程说明:
0服务容器负责启动,加载,运行服务提供者。
1. 服务提供者在启动时,向注册中心注册自己提供的服务。
2. 服务消费者在启动时,向注册中心订阅自己所需的服务。
3. 注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。
4. 服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。
5. 服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心。
Dubbo使用方法
1.Dubbo采用全Spring配置方式,透明化接入应用,对应用没有任何API侵入,只需用Spring加载Dubbo的配置即可,Dubbo基于Spring的Schema扩展进行加载。
2.dubbo通常采用zookeeper作为注册中心,这也是官方推荐的方式
注册中心
注册中心负责服务地址的注册与查找,相当于目录服务,服务提供者和消费者只在启动时与注册中心交互,注册中心不转发请求,压力较小。使用dubbo-2.3.3以上版本,建议使用zookeeper注册中心。
Zookeeper是Apacahe Hadoop的子项目,是一个树型的目录服务,支持变更推送,适合作为Dubbo服务的注册中心,工业强度较高,可用于生产环境,并推荐使用
Zookeeper的安装
第一步:安装jdk
第二步:解压缩zookeeper压缩包
第三步:将conf文件夹下zoo_sample.cfg复制一份,改名为zoo.cfg
第四步:修改配置dataDir属性,指定一个真实目录
Dubbo原理(使用zookeeper做注册中心)
Dubbo常用配置介绍
1.<dubbo:service/>
服务配置,用于暴露服务
2. <dubbo:reference/>
引用配置,用于创建一个远程服务代理
3. <dubbo:protocol/>
协议配置,用于配置提供服务的协议信息,协议由提供方指定,消费方被动接受。
4. <dubbo:application/>
应用配置,用于配置当前应用信息,不管该应用是提供者还是消费者。
5. <dubbo:module/>
模块配置,用于配置当前模块信息,可选。
6. <dubbo:registry/>
注册中心配置,用于配置连接注册中心相关信息。
7. <dubbo:monitor/>
监控中心配置,用于配置连接监控中心相关信息,可选。
8. <dubbo:provider/>
提供方的缺省值,当ProtocolConfig和ServiceConfig某属性没有配置时,采用此缺省值,可选。
9. <dubbo:consumer/>
消费方缺省配置,当ReferenceConfig某属性没有配置时,采用此缺省值,可选。
10. <dubbo:method/>
方法配置,用于ServiceConfig和ReferenceConfig指定方法级的配置信息。
11. <dubbo:argument/>
用于指定方法参数配置。
Dubbo的spring配置
Dubbo基于spring的schema扩展进行加载
单一工程中的spring配置
<bean id="xxxService" class="com.xxx.XxxServiceImpl" />
<bean id="xxxAction" class="com.xxx.XxxAction">
<property name="xxxService" ref="xxxService" />
</bean>
远程服务
将local.xml配置拆分成两份,将服务定义部分放在服务提供方remote-provider.xml,将服务引用部分放在服务消费方remote-consumer.xml。
然后提供方暴露服务:
<beans xmlns:dubbo="http://code.alibabatech.com/schema/dubbo" xsi:schemaLocation=
http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd>
<!-- 和本地服务一样实现远程服务 -->
<bean id="xxxService" class="com.xxx.XxxServiceImpl" />
<!-- 使用dubbo发布服务 -->
<!-- 提供方应用信息,用于计算依赖关系 -->
<dubbo:application name="hello-world-app" />
<dubbo:registry protocol="zookeeper"
address="192.168.25.154:2181,192.168.25.154:2182,192.168.25.154:2183" />
<!-- 用dubbo协议在20880端口暴露服务 -->
<dubbo:protocol name="dubbo" port="20880" />
<!-- 声明需要暴露的服务接口 -->
<dubbo:service interface="com.xxx.XxxService" ref="xxxService" />
<dubbo:service interface="com.xxx.XxxService" ref="xxxService" />
<beans>
消费方引用服务:
<dubbo:application name="hello-world-app"/>
<dubbo:registry protocol="zookeeper" address="192.168.25.154:2181,192.168.25.154:2182,192.168.25.154:2183"/>
<!-- 增加引用远程服务配置 -->
<dubbo:reference id="xxxService" interface="com.xxx.XxxService" />
<!-- 和本地服务一样使用远程服务 -->
<bean id="xxxAction" class="com.xxx.XxxAction">
<property name="xxxService" ref="xxxService" />
</bean>
框架整合
maven添加Dubbo依赖:
<!-- dubbo相关 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>dubbo</artifactId>
<!-- 排除依赖 -->
<exclusions>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring</artifactId>
</exclusion>
<exclusion>
<groupId>org.jboss.netty</groupId>
<artifactId>netty</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
</dependency>
<dependency>
<groupId>com.github.sgroschupf</groupId>
<artifactId>zkclient</artifactId>
</dependency>
启动容器
1. 通过spring方式启动
1.1 applicationContext-dubbo.xml位置没有要求
ClassPathXmlApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext-dubbo.xml");
ac.start();
System.out.println("启动成功");
System.in.read();
- 使用dubbo提供的方式启动(推荐使用这种方式)
2.1 要求applicationContext-dubbo.xml必须放入类路径下/META-INF/spring/*.xml
Main.main(args);
Dubbo控制台
1.本质就是一个web项目
2.获取注册中心内Provider注册的信息.用页面呈现出来.
3.实现步骤
3.1 把dubbo-admin-2.5.3.war上传到服务器tomcat中.
3.2 启动tomcat完成后关闭tomcat,删除上传的dubbo-admin-2.5.3.war
3.2.1 为什么要删除:需要修改解压后的文件夹,如果不删除.war文件,下次重启tomcat会还原成未修改状态
3.3 进入dubbo-admin-2.5.3/WEB-INF/dubbo.properties,修改第一行为zookeeper的ip和端口
3.3.2 第二行和第三行为管理界面的用户名和密码
3.4 启动tomcat, 在浏览器地址栏访问tomcat中dubbo项目