1. 什么是微服务
微服务
:从字面来理解就是微小的服务
(1)服务:指的是项目中的功能模块,它可以帮助用户解决一个或者一组问题,在开发中体现为一个Module
(2)微小:强调的是单个服务的大小,主要体现为:
- 微服务的体积小,复杂度低
- 单个服务开发人员较少
什么是单体式架构?:单体式架构是没有做任何拆分的JavaWeb程序,也就是说将所有的功能模块都集中在一个程序中,比如说常规的SpringBoot程序
,直接跑一个tomcat
,每一次启动,每一次改动都会导致所有的模块都需要重新编译
什么是分布式架构?:按照业务垂直划分,每个业务都是单体架构,通过API相互调用,简单来说,就是存在多个功能互不耦合的单体服务,将这些单体服务拆出来,然后分别运行,当服务之间需要相互调用的时候,可以通过RPC|HTTP
来相互调用API
什么是SOA架构:它是一种面向服务的架构,其应用程序的不同组件通过网络上的通信协议向其他组件提供服务或者消费服务,所以也是分布式服务的一种,它具有分布式服务的特征,但是它进一步细化了分布式架构中的角色,将原本的分布式架构中的单体应用赋予了角色,也就是生产者和消费者,同时提出了注册中心的概念,更加了细化了调用逻辑。
2. 剖析一个Web程序的执行流程
一个HTTP请求是如何响应的?
在典型的Web
应用程序中,前后端通常是采用HTTP
协议来完成请求和响应的,开发过程中需要完成URL
地址的映射、HTTP请求的构建、数据的序列化和反序列化以及实现各个服务之间内部的逻辑,大体来说,流程是这样的:
- 浏览器发起一个HTTP请求
- 解析HTTP请求,提取URL中的主体内容,然后根据
web.xml
文件中的标签配置,获取到指定的控制器 - 请求参数的构建,也就是基于
Post
请求或者是Get
请求中的参数,解析这些参数,然后将这些参数解析成控制器想要的入参,如果解析失败了,那么就会报错,然后根据这些入参,将这些入参封装成Java程序中规定的Java
对象 - 执行业务逻辑的处理
- 业务逻辑处理完毕后,就将返回值对象序列化为Json格式,然后返回到前端
对应的开发,就是:
- 编写
web.xml
文件 - 编写
spring
的配置文件 - 编写响应HTTP请求的controller
- 部署到web服务器
3. SpringBoot的异常处理方式
第一种方式,可以基于注解@ExceptionHandler注解来实现,这个注解通常来说有这样的使用场景
(1)当需要捕获当前类中抛出的异常方法的时候,这时候可以通过在异常处理方法上标注上@ExceptionHandler,指明用此方法来处理抛出的异常(2)当需要捕获当前类中抛出的特定的异常的时候,这时候可以在注解中注明需要处理的异常是哪个异常
第二种方式,可以基于HandlerExceptionResolver全局异常处理器来实现,使用的步骤是这样的:
给定一个类,然后让它实现HandlerExceptionResolver接口,将这个实现类纳入Spring容器的管理,这样Spring就能够扫描到它并且作为全局异常处理器用,这样的话,在异常抛出的时候,就会调用此实现类中的具体方法来实现异常的处理
第三种方式,可以基于@ControllerAdvice注解来实现,这其实是第一种方式的增强模式,第一种模式只能够捕获当前类抛出的异常,当在控制器中标注上@ControllerAdvice,同时在方法上标注@ExceptionHandler的时候就可以实现全局异常处理器的效果了,也就是其他类抛出的异常也能够被捕获。