Dubbo框架介绍和入门程序
RPC介绍
Remote Process Callable 表示远程调用
的意思
两台服务器A,B,一个应用部署在A服务器上,想要调用B服务器上应用提供的函数/方法
- 工作流程
》1、 A连接B,主要是通过在客户端和服务器之间建立TCP连接
》2、 A查找B上的方法 ,A调用RPC框架,需要B服务器(如主机或IP地址)以及特定的端口,方法的名称
》3、 A 传参-序列化:方法的参数需要通过底层的网络协议如TCP传递到B服务器,通过寻址和传输将序列化的二进制发送给B服务器
》4、 B 参数-反序列化(序列化的逆操作),恢复为内存中的表达方式,然后找到对应的方法(寻址的一部分)进行本地调用,然后得到返回值
》5、 B 将返回值 序列化写到A,A再返序列化得到结果
Dubbo框架介绍
Dubbo是一个分布式服务框架,以及阿里巴巴内部的SOA服务化治理方案的核心框架。其功能主要包括:高性能NIO通讯及多协议集成,服务动态寻址与路由,软负载均衡与容错,依赖分析与降级等,Dubbo是一款高性能、轻量级
的开源Java RPC框架
-
可通过高性能的 RPC (远程调用)实现服务的输出和输入功能,可以和Spring框架无缝集成
-
远程通讯: 提供对多种基于长连接的NIO框架抽象封装,包括多种线程模型,序列化,以及“请求-响应”模式的信息交换方式。
-
集群容错: 提供基于接口方法的透明远程过程调用,包括多协议支持,以及软负载均衡,失败容错,地址路由,动态配置等集群支持。
-
自动发现: 基于注册中心目录服务,使服务消费方能动态的查找服务提供方,使地址透明,使服务提供方可以平滑增加或减少机器。
-
Dubbo原理
消费者与提供者都要去注册,因为消费者是通过注册中心找到提供者
消费者通过RPC调用提供者
监控中心可以监控,有哪些提供者与消费者
Dubbo框架入门程序
使用IDEA创建一个工程,在工程下创建两个webapp模块
web01 模拟服务提供者
- pom.xml
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<spring.version>5.2.9.RELEASE</spring.version>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jms</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<