Dubbo
一、Dubbo的简介(原先是阿里的产品,后来成了Apache)
1、Dubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC(远程过程调用)远程服务调用方案,以及SOA(面向服务的架构)服务治理方案。大家一起干同一个活:集群 大家一起干不同的活:分布式
Dubbo架构图
dubbo执行流程
1、首先服务提供方通过dubbo容器来启动
2、然后去注册中心去注册服务提供方的服务
3、服务消费方想去调用服务提供方,必须先得注册中心订阅服务,注册中心会给服务消费方一个通知(服务的代理对象)
4、然后拿着代理对象的地址真正的去调用服务提供方
二、Registry 注册中心
1、 Registry 注册中心
1.1 注册中心是整个Dubbo架构重要部分,是Provider和Customer桥梁(服务提供方 服务消费方)
1.2 Dubbo支持很多种注册中心类型(Multicast注册中心、Zookeeper注册中心、Redis注册中心、Simple注册中心)
1.2.1 Zookeeper 注册中心。从Dubbo 2.3.3 开始支持。支持基于网络的集群方。也是官方推荐的方式,但是稳定性受限Zookeeper的稳定性
1.2.2 Multicast注册中心,去中心化注册中心,不需要单独单机注册中心,只适用于小型应用或测试环境。除此之外还有Redis注册中心和Simple注册中心.
3、Zookeeper 简介
3.1 ZooKeeper是一个开放源码的分布式应用程序协调服务组件。是Hadoop的一个子项目
3.2 特点:具有高可靠性,可扩展性,分布式,可配置的协调机制
3.3 作用
3.3.1 数据发布与订阅(注册中心),Dubbo应用此特性
3.3.2 集群管理与Master选举 ,Solr集群应用此特性
3.3.3 命名服务(Naming Service)
3.3.4 分布式通知/协调
3.3.5 负载均衡
3.3.6 分布式锁
3.3.7 分布式队列
3.4 底层使用java编写.所以使用Zookeeper时需要配置JDK环境变量
三、zookeeper安装
下载地址:zookeeper.apache.org
1、修改/etc/profile,配置jdk环境变量
2、安装Zookeeper单机版步骤
3、上传Zookeeper压缩包,并解压
mkdir /usr/local/zookeeper
tar zxvf zookeeper-3.4.6.tar.gz -C /usr/local/zookeeper/
4、 在解压后的文件夹中新建data文件夹。作为zookeeper数据存放文件夹
mkdir data
全路径:/usr/local/zookeeper/zookeeper-3.4.12/data
5、 进入zookeeper的conf文件夹中把zoo_sample.cfg复制一份命名为zoo.cfg
cp zoo_sample.cfg zoo.cfg
6、修改zoo.cfg中dataDir的值为data文件夹的路径
[root@localhost conf]# vim zoo.cfg
dataDir=/usr/local/zookeeper/zookeeper-3.4.12/data
7、进入Zookeeper的bin文件夹(/usr/local/zookeeper/zookeeper-3.4.12/bin),使用zkServer.sh启动和查看状态
8、 ./zkServer.sh start 启动命令
9、 ./zkServer.sh status 查看状态
查看状态时显示下面效果表示安装并启动成功,其中Mode:standalone表示单机版
停止zookeeper服务:[root@localhost bin]# ./zkServer.sh stop
四、dubbo协议
服务提供者通过指定的协议来暴露服务。协议由提供方指定,消费方被动接受。推荐使用dubbo协议,除此之外还支持RMI 协议和Hessian 协议
dubbo协议的特点及配置:
dubbo缺省协议采用单一长连接和NIO异步通讯,适合于小数据量大并发的服务调用,以及服务消费者机器数远大于服务提供者机器数的情况
dubbo缺省协议不适合传送大数据量的服务,比如传文件,传视频等,除非请求量很低。
配置:<dubbo:protocol name="dubbo" port="20880" />
五、dubbo开发基础代码
一:配置式开发
服务提供方(provider)[配置式开发]
1.新建Maven Project,命名为dubbo-provider,其中Packaging方式选择jar即可.Dubbo是不依赖于web容器
2.配置provider的pom.xml文件(配置基本的依赖gav:dubbo依赖、zookeeper客户端、spring-context)
因为Dubbo需要在zookeeper中进行注册,需要上传数据给zookeeper,所以需要客户端功能.需要下载zkClient
3.新建实体类,实现Serializable接口(pojo)
4.新建service接口和service接口的实现类
5.新建Spring配置文件(约束头信息可在官方文档User Guide中查找,官方文档里的-换成英文的)
配置式开发的spring配置文件(spring配置文件路径classpath:/META-INF/spring/*.xml)
spring-provider配置文件的头信息及需要配置的五项基本内容
Maven项目结构一览(配置式开发dubbo-provider)
启动dubbo-provider =>使用Dubbo的Main类
启动成功截图
服务消费方(consumer)[配置式开发]
1.pom.xml依赖 =>跟服务提供方保持一致
2.dubbo-consumer的配置文件
<!-- 配置应用名称 -->
<dubbo:application name="dubbo-consumer"/>
<!-- 配置注册中心地址 -->
<dubbo:registry protocol="zookeeper" address="192.168.199.83:2181"></dubbo:registry>
<!-- 声明调用服务接口 (调用的服务提供方的暴露出来的service接口)-->
<dubbo:reference id="peopleProviderService" interface="com.boom.service.PeopleProviderService"></dubbo:reference>
3.service接口和service实现类的代码(没用上)
4.测试类
Maven项目结构一览(配置式开发dubbo-consumer)
测试总结:
二:注解式开发(service )
服务提供方(provider)[注解式开发]
1.在service实现类上加上service注解,表示当前类对外提供远程服务
2.修改dubbo-provider.xml
服务消费方(consumer)[注解式开发]
1.修改dubbo-consumer.xml
2.修改PeopleConsumerServiceImpl
3.修改测试类
服务消费方(consumer)[注解式开发]修改结束
六、registry可视化管理界面
1、把dubbo-admin-2.5.3.war粘贴到tomcat中(windows下或linux下都可以)
2、启动tomcat,然后关闭tomcat(通过tomcat解压该war包),并删除webapps中dubbo-xxx.war(如果不删则启动后重新覆盖)
3、修改dubbo-admin-2.5.3/WEB-INF/dubbo.properties
第一行需要改写成自己Zookeeper的地址及端口
第二行是管理员root的密码为root
第三行是用户guest的密码为guest
4、关闭防火墙或放行8080端口,启动tomcat。浏览器访问。访问默认用户名和密码:root/root (不要忘记启动zookeeper)