分布式框架整个流程:
前端页面--> controller -- > service --> mapper -->(pojo类,也就是实体类Entity,通常要实现序列化 implements Serializable)-->数据库
根据开发规则,类名或者接口名 ,后边加 s ,通常是工具类。
RPC(Remote Produce Call):远程过程调用框架。
RPC协议规定允许互联网中一台主机程序调用另一台主机程序,而程序员无需对这个交互过程进行编程。在RPC协议中强调当A程序调用B程序中功能或方法时,A是不知道B中方法具体实现的。
RPC是上层协议,底层可以基于TCP协议,也可以基于HTTP协议。一般我们说RPC都是基于RPC的具体实现,如:Dubbo框架。从广义上讲只要是满足网络中进行通讯调用都统称为RPC,甚至HTTP协议都可以说是RPC的具体实现,但是具体分析看来---RPC协议要比HTTP协议更加高效,基于RPC的框架功能更多。
RPC协议是基于分布式架构而出现的,所以RPC在分布式项目中有着得天独厚的优势。
1.RPC 和 HTTP对比
1.1具体实现
RPC:可以基于TCP协议,也可以基于HTTP协议。
HTTP:基于HTTP协议。
1.2效率
RPC:自定义具体实现可以减少很多无用的报文内容,使得报文体积更小。
HTTP:如果是HTTP 1.1 报文中很多内容都是无用的。如果是HTTP2.0以后和RPC相差不大,比RPC少的可能就是一些服务治理等功能。
1.3连接方式
RPC:支持长连接。
HTTP:(2.0也开始支持长连接)每次连接都是3次握手,断开4次挥手。
1.4性能
RPC可以基于很多序列化方式(允许以字符的形式传输)。如:thrift
HTTP 主要是通过JSON(超文本传输),序列化和反序列效率更低。
1.5注册中心
RPC :一般RPC框架都带有注册中心。
HTTP:都是直连。
1.6负载均衡
RPC:绝大多数RPC框架都带有负载均衡测量。
HTTP:一般都需要借助第三方工具。如:nginx
1.7综合结论
RPC框架一般都带有丰富的服务治理等功能,更适合企业内部接口调用。而HTTP更适合多平台之间相互调用。
2.HttpClient实现RPC
HttpClient是一个微框架, (池化思想)支持长连接,主要用这个框架,并使用java代码,来模拟一个浏览器,向服务端发请求,以此模拟 远程过程调用。
模拟的浏览器,向客户端发送Http请求,然后再模拟服务端,向客户端发送一个 Http类型的响应。
2.1无参数GET请求
使用浏览器,访问网站的过程:
1.打开浏览器
2.输入地址
3.访问
4.看结果
使用HttpClient,访问WEB服务的过程:
1.创建客户端,相当于打开浏览器
2.创建请求地址,相当于输入地址
3.发起请求,相当于访问网站 (==回车键)
4.处理响应结果,相当于 浏览器显示结果
具体代码如下:
2.2有参数GET请求
3.1无参数POST请求
3.2有参数POST请求
4.RMI实现RPC
RMI:(Remote Method Invocation)远程方法调用。(协议,长连接)
RMI是从JDK1.2推出的功能,它可以实现在一个Java应用中可以像调用本地方法一样调用另一个服务器中Java应用(JVM)中的内容。
RMI 是Java语言的远程调用,无法实现跨语言。
简言之: 用RMI开发一个Client,再开发一个Server
RMI执行流程:
Registry(注册表)是放置所有服务器对象的命名空间。 每次服务端创建一个对象时,它都会使用bind()或rebind()方法注册该对象。 这些是使用称为绑定名称的唯一名称注册的。
要调用远程对象,客户端需要该对象的引用。即通过服务端绑定的名称从注册表中获取对象(lookup()方法)。
如果基于RMI协议,则发送的请求将不再是 http协议,而是 rmi协议的, "rmi:// Ip:port:接口的别名(server的,可自定义,唯一即可)
Client根据访问路径发送请求,RMI自动生成代理,然后Client.方法,即可开始远程调用。
RIM-Registry应该如何实现代理呢?----Naming(请求的路径名),作为参数,然后生成一个proxy类型的代理对象