单体架构
- 一个归档包(例如 war 格式或者 Jar 格式)包含了应用所有功能的应用程序,我们通常称之为单体应用。也称之为单体应用架构,这是一种比较传统的架构风格。
![fd14609b05e13aade27bb73dc53c96ce.png](https://img-blog.csdnimg.cn/img_convert/fd14609b05e13aade27bb73dc53c96ce.png)
单体架构优点:
- 便于开发:只需借助 IDE 的开发,调试功能即可完成
- 易于测试:只需要通过单元测试或浏览器即可完成测试
- 易于部署:打包成单一可执行 jar 或者 war 包,完成 jar 或者 war 部署即可
单体架构缺点:
- 复杂性高 : 整个项目包含的模块非常多,模块的边界模糊,依赖关系不清晰,代码质量参差不齐,整个项目非常复杂,修改一个 BUG 都会造成隐含的缺陷。
- 部署速度逐渐变慢:随着代码的增加,构建和部署的时间也会增加。 而在单体应用中,每次功能的变更或缺陷的修复都会导致我们需要重新部署整个应用。
- 扩展能力受限:单体应用只能作为一个整体进行扩展,无法结合业务模块的特点进行伸缩。
- 阻碍技术创新: 单体应用往往使用统一的技术平台或方案解决所有问题,团队的每个成员都必须使用相同的开发语言和架构,想要引入新的框架或技术平台非常困难。
SOA 架构
- SOA 是 Service-Oriented Architecture 的英文缩写,就是面向服务的架构。这里的服务可以理解为 service 层业务服务。将系统拆分为不同的服务单元,通过网络协议服务单元之间进行通信。服务单元完成一个特定功能(如:验证、支付、登录等等),通过服务单元之间的集成组成完整的应用程序。
- SOA 架构中由两个重要的角色: 服务提供者(Provider)和服务使用者(Consumer)
![7d57031bd8e54fb458ef9e6426fab419.png](https://img-blog.csdnimg.cn/img_convert/7d57031bd8e54fb458ef9e6426fab419.png)
SOA 架构的优点:
- 更易维护:业务服务提供者和业务服务使用者的松散耦合关系。当需求发生变化的时候,不需要修改提供业务服务的接口,只需要调整业务服务流程或者修改操作即可,整个应用系统也更容易被维护。
- 更高的可用性:该特点是在于服务提供者和服务使用者的松散耦合关系上得以发挥与体现。使用者无须了解提供者的具休实现细节。
- 更好的伸缩性:依靠业务服务设计、开发和部署等所采用的架构模型实现伸缩性。使得服务提供者可以互相彼此独立地进行调整,以满足新的服务需求。
SOA 架构的缺点:
- 减低了系统的性能
- 系统之间交互需要使用远程通信,接口开发增加工作量
RPC 调用
RPC(Remote Procedure Call)—远程过程调用,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。请求程序就是一个客户机,而服务提供程序就是一个服务器。
![7c514ca8d393aa6157fe245a1e3d234a.png](https://img-blog.csdnimg.cn/img_convert/7c514ca8d393aa6157fe245a1e3d234a.png)
RPC 的应用场景:
1.支付宝、微信、银联等第三方支付接入
![65b3a32e05d88fa2c67799946eed55b5.png](https://img-blog.csdnimg.cn/img_convert/65b3a32e05d88fa2c67799946eed55b5.png)
2.公司内部的 不同业务系统, 不同技术平台的整合
![0de4293633e445487855458c8250ec27.png](https://img-blog.csdnimg.cn/img_convert/0de4293633e445487855458c8250ec27.png)
RPC 的实现方式
RMI:Java提供的基于 java 平台 RPC 远程调用技术,服务消费者和服务提供者是 java 平台
![89b74f863c7583516851d4adf3e66095.png](https://img-blog.csdnimg.cn/img_convert/89b74f863c7583516851d4adf3e66095.png)
WEBSERVICE:通过 Http 协议,请求发送 xml 和响应 xml 的 RPC 远程调用技术,最大的特征使用xml 进行数据交互,可以实现跨平台调用。
![a2776786dbaf6f9c7dee48b1a26af8aa.png](https://img-blog.csdnimg.cn/img_convert/a2776786dbaf6f9c7dee48b1a26af8aa.png)
HttpClient:Http客户端工具,Java 程序通过 HttpClient 发送 Http 协议的请求,直接获得远程资源。
![51147e96ca66b3f97a26fa8d06340368.png](https://img-blog.csdnimg.cn/img_convert/51147e96ca66b3f97a26fa8d06340368.png)
实现rpc的方式
![94ede0498ca4c408e1ac02b509f73bbd.png](https://img-blog.csdnimg.cn/img_convert/94ede0498ca4c408e1ac02b509f73bbd.png)
RMI 远程调用
RMI 指的是远程方法调用 (Remote Method Invocation)。它是一种机制,能够让在某个 Java虚拟机上的对象调用另一个 Java 虚拟机中的对象上的方法。可以用此方法调用的任何对象必须实现该远程接口。
RMI 相关 API 总结
![e8589c32e8fbf3227e79bf5001179246.png](https://img-blog.csdnimg.cn/img_convert/e8589c32e8fbf3227e79bf5001179246.png)
webservice 实现 RPC 调用
Web service 是一个平台独立的,低耦合的 web 的应用程序用于开发分布式的互操作的应用程序。Web Service 技术, 能使得运行在不同机器上的不同应用无须借助附加的、专门的第三方软件或硬件, 就可相互交换数据或集成。
SOAP(Simple Object Access Protocol) 简单对象访问协议:SOAP=http+xml
![529c96df0d02dd83299c6409434d5812.png](https://img-blog.csdnimg.cn/img_convert/529c96df0d02dd83299c6409434d5812.png)
WSDL(Web Services Description Language) Web Service 的描述语言:
一个 webservice 服务的说明书,通过该说明书可以完成 webservice 服务的调用
WEBSERVICE 相关 API 总结
![cc9d2d31718f8d20b350c1e25eff1885.png](https://img-blog.csdnimg.cn/img_convert/cc9d2d31718f8d20b350c1e25eff1885.png)
HttpClient
- HTTP 协议可能是现在 Internet 上使用得最多、最重要的协议了,越来越多的 Java 应用程序需要直接通过 HTTP 协议来访问网络资源。
- HttpClient 是 Apache Jakarta Common 下的子项目,供高效的、最新的、功能丰富的支持HTTP 协议的客户端编程工具包。实现了所有 HTTP 的方法(GET,POST,PUT,HEAD 等)支持RestFul。
RestTemplate
RestTemplate 是 Spring 提供的用于访问 Rest 服务的客户端,RestTemplate 提供了多种便捷访问远程 Http 服务的方法,能够大大提高客户端的编写效率。
Ajax的RPC跨域问题解决方案:
- JsonP:通过获得不同域的服务器上的 js 代码(js 代码中包含一个在本地定义的 js 函数和需要获得数据),来获得不同域的数据。
添加 fastjson 依赖
<!-- fastjson -->
修改OrderController类
/****
请求页面中导入 juqery 函数库
<
利用 <script src="url?callback=doSomething"></script>发送请求
<
- CORSFilter:通过 CORSFilter 过滤器在服务器端修改 Http 的响应头。
添加 CORSFilter 依赖
<dependency>
web.xml 配置 CORSFilter
<filter>