Java — Dubbo : 高效的RPC框架(1)
高效:协议和封装
Dubbo简介:
是一个高可用的,基于Java的开源RPC框架;Dubbo框架不仅仅你是具备RPC的访问功能,还包含服务治理功能。执行效率高。
执行效率:越底层越高效
2.7以后是Apache,2.7之前是阿里巴巴的。
区别在于包名,不是类名。
Dubbo架构讲解
1、架构图
首先有一个注册中心,不强制要求要什么,就是以一个软件,可以不要注册中心,背下来IP和端口。推荐软件使用:zookeeper
duubo不能独立开发,必须依赖于容器,容器就是spring容器。
duubo是根据配置文件连接zookeeper;根据注解获得配置文件去创建bean对象;然后拿到duubo内置类似于工厂的东西;获取到bean对象;连接到zookeeper,拼一个URL地址;往zookeeper里面一存;就算服务器启动了。
duubo干的活与我们基于RMI手写的RPC是一样的。具体的服务代码,还是需要我们自行定义。而是帮助我们做服务的发布,把我们写好的代码发布到zookeeper上。
dubbo是用节点的名字存储的URL地址。拿到URL地址之后就可以创建代理对象,本地调方法,远程服务,进行返回。
Monitor:监控中心、监控器。很弱鸡,只能干一个活,而且是被动的。duubo提供了一个小的外部应用,下载启动,只需要写一个zookeeper在哪。启动的之后就等着。等着客户端、服务端发消息。服务端:当前服务端被调用了多少次;客户端:当前调用了那个服务几次。就是统计数据,而且是被动的。
start:先启动容器,Spring可以启动。读取所有的服务端代码,发布到zookeeper中。服务端代码在dubbo中叫Provider(服务的提供者)
register:注册,发布
subscribe:发现、订阅
客户端启动的时候连接zookeeper,拿到URL地址,创建一个代理对象,然后远程调用。
init线条代表初始化;虚线表示异步,实线表示同步。异步不阻塞线程性能高,同步阻塞线程必须等待响应结果才能继续执行,相对性能低。
证明Dubbo的服务的代码测试:
首先创建一个maven类型的项目,项目名new_dubbo
在项目中导入依赖,dubbo是要必须依赖于spring容器。所以可以导入springboot的依赖
<!--dubbo必须依赖于spring-->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.3.2.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
导过依赖之后再创建一个new_dubbo的子项目new_dubbo_provider(供应商)。
在new_dubbo_provider的pom.xml文件下导入依赖。
<dependencies>
<!--启动器-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<!--dubbo的基于spring-boot的依赖-->
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>2.7.7</version>
</dependency>
</dependencies>
创建一个接口
package com.bjsxt.service;
public interface FirstService {
String sayHello(String name);
}
创建接口的实现类
package com.bjsxt.service