一. RPC(远程过程调用) RPC并不是一个具体的技术,而是指整个网络远程调用过程
RPC是一个泛化的概念,严格来说一切远程过程调用手段都属于RPC范畴。各种开发语言都有自己的RPC框架。Java中的RPC框架比较多,广泛使用的有RMI、Hessian、Dubbo等。
RPC的组件: 1.客户端Client(服务调用者) 2.客户端存根Stub: 存放服务端地址信息,将客户端的请求参数打包成网络消息,再通过网络发送给服务方 3.服务端存根Stub: 接受客户端发送过来的消息并解包,再调用本地服务 4.服务端Server: 服务提供者
二. Apache Dubbo概述
Dubbo提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现。
Provider 是服务的提供方 / Consumer 调用远程服务的服务消费方 /
Registry 服务注册与发现的注册中心 / Monitor 统计服务的调用次数和调用时间的监控中心
1. 服务容器Container负责启动,加载,运行服务提供者
2. 服务提供者在启动时,向注册中心注册自己提供的服务。
3. 服务消费者在启动时,向注册中心订阅自己所需的服务。
4. 注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。
5. 服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。
6. 服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心。
三. 服务注册中心 Zookeeper (支持变更推送)
zkServer.cmd 开启服务 zkCli.cmd 命令
get 节点路径 获取节点中的值 / delete 节点路径 删除节点 只能删除空节点,即不能有子节点
rmr 节点路径 递归删除节点 remove recursion / stat 节点路径 查看节点状态
四. Dubbo快速开发(Dubbo作为RPC的框架 核心功能就是远程调用)
1. 创建父工程(没有代码,主要添加工程需要的库的依赖管理)DependencyManagement
1.1 创建不选择骨架 GroupID:com.itheima.study.dubbo ArtifactId:study-dubbo
1.2 因为不实现代码 所以删除src目录
1.3 修改pom.xml文件 抽取版本、增加赖库依赖管理 (注意dubbo版本必须2.6.2以上)
(spring webmvc / dubbo / zookeeper / zookeeper client)
2. 创建接口模块( 主要放业务接口的定义,服务消费者模块和服务提供者模块公共依赖模块)
2.1 在父工程的基础上创建子模块,不选择任何骨架 (创建到父工程下面)
2.2 修改pom.xml 增加打包方式
2.3 创建接口 写入方法
3. 服务提供者模块( 需要在容器启动时,把服务注册到zookeeper中)
3.1 使用webapp骨架创建模块,导入依赖 spring-webmvc、zookeeper及客户端和<build>编译插件tomcat7
3.2 创建java源代码目录,并增加业务实现类UserServiceImpl,需要实现UserService接口
3.3 创建resources资源目录,并创建spring-dubbo-provider.xml 配置文件:
配置dubbo的应用名称 / 配置dubbo注册中心Zookeeper地址 / 配置dubbo协议名称和服务端口
配置dubbo注解包扫描 / 配置spring自动扫描 / 配置需要暴露的业务接口及实例
3.4 将资料的log4j.properties配置文件拷贝到resources目录下
3.5 在web.xml文件中,配置spring监听器,指定spring配置文件加载位置
3.6 启动服务提供者 注意 : 消费者与提供者应用名称不能相同 /
如果有多个服务提供者,名称不能相同,通信端口也不能相同 /
只有服务提供者才会配置服务发布的协议
4. 服务消费者模块
模块基于是Web应用,需要引入spring-webmvc,需要在容器启动时,去zookeeper注册中心订阅服务,需要引入zookeeper及客户端依赖。
4.1 使用webapp 骨架创建,导入依赖坐标spring-webmvc、zookeeper及客户端和编译插件tomcat7
4.2 创建java源代码目录,并添加 UserController类 (控制器类UserController,提供web方法login)
4.3 创建resources资源目录,并创建spring-dubbo-consumer.xml 配置文件:
配置dubbo的应用名称 / 配置dubbo注册中心Zookeeper地址 / 配置dubbo协议名称和服务端口
配置dubbo注解包扫描 / 配置spring自动扫描 / 配置需要订阅的业务接口及引用
4.4 将资料的log4j.properties配置文件拷贝到resources目录下
4.5 在web.xml文件中,配置SpringMVC
4.6 启动服务消费者,并测试访问
五. Dubbo 管理控制台
因为我们需要知道 zookeeper注册中心都注册了哪些服务,有哪些消费者类消费这些服务
1. 安装: 将dubbo-admin-2.6.0.war文件复制到tomcat的webapps目录下 /
启动tomcat,此war文件会自动解压 / 修改WEB-INF下的dubbo.properties文件 /重启tomcat
2. 使用 : 访问http://localhost:8080/dubbo-admin-2.6.0/,输入用户名(root)和密码(root) /
启动服务提供者工程和服务消费者工程,可以在查看到对应的信息 /
六. Dubbo 相关配置说明
服务提供者和服务消费者前面章节实现都是基于配置文件进行服务注册与订阅,如果使用包扫描,可以使用注解方式实现
1. 把spring-dubbo-provider中的服务注册配置注释掉,如图所示
2. 在UserServiceImpl类中头部,使用注解 @Service
3.把spring-dubbo-consumer中的控制器初始化及服务订阅配置注释掉,如图所示
4. 采用注解初始化控制器,在控制器头部加入@Controller