目录

项目结构分析

 pom.xml文件删除线

 MySQL的版本问题

 Nacos服务启动问题

 idea中启动nacos

 Maven 依赖问题

项目克隆问题

JDK 配置问题

Maven配置编译问题

服务注册异常(NacosException)

 服务配置读取问题

 配置文件格式问题

 无法访问此网站

 pom.xml有删除横线

 访问404异常

 访问500异常

 端口占用问题

 服务调用案例分析

 服务ID问题分析

Maven Helper插件应用

客户端调用异常(ClientException)

 @PathVariable 注解在@FeignClient中应用

 依赖注入失败(Bean Not Found)

 请求映射路径重复定义

 @FeignClient注解名字问题

 Feign远程调用超时

 图解服务调用方案

配置文件加载顺序

 拉取(Pull)配置信息

Nacos配置中心模型

Tomcat 请求处理分析

 Java线程池构成分析

线程池任务执行过程

线程拒绝执行异常

 JDK 版本问题

 Sentinel 控制台显示

微服务中的Sentinel日志

回顾Spring MVC 请求处理

Sentinel 请求拦截分析

Day06

Idea中启动Nacos

跨域访问问题

Nacos 服务注册问题

文件上传404问题

请求资源405异常

请求资源500异常

BeanCreationException 异常

服务名无效或没有定义

Day07

网关配置文件问题

服务访问被拒绝(Connection refused)

网关负载均衡调用流程分析

503访问异常

Postman请求携带请求头

作业(homework)

Day08

Debug调试

http Client 应用

503 异常分析

修改文件上传工程结构

Day09

网关执行流程分析

存在多个跨域设计

自定义执行链设计

Spring MVC 拦截器

Spring框架生态设计

Day10

JVM 参数说明

AOP 执行流程分析

Day11

文件上传架构升级

SpringSecurity 执行流程

JS中的断点调试

Day12

单点登陆方案

401 认证异常

检查令牌

权限校验过程分析

postman 上传文件

403 访问被拒绝

资源请求图标问题

Day13

Postman测试刷新令牌

生成序列化ID

Idea&@Autowired


项目结构分析

 

微服务依赖问题_微服务依赖问题

 pom.xml文件删除线

微服务依赖问题_微服务_02

 MySQL的版本问题

当我们在执行一些SQL脚本时(例如 nacos-mysql.sql文件),假如出现如下错误,请升级你的mysql(建议mysql5.7以上或MariaDB 10.5.11)

微服务依赖问题_拦截器_03

 Nacos服务启动问题

问题1:没有配置JAVA_HOME环境变量,或者JDK有问题

微服务依赖问题_拦截器_04

 问题2:nacos链接mysql时,链接配置问题

微服务依赖问题_java_05

问题3:启动命令用错位置

微服务依赖问题_java_06

 idea中启动nacos

第一步:添加或编辑配置,例如:

微服务依赖问题_java_07

 第二步:新建 shell Script脚本,例如:

微服务依赖问题_java_08

 第三步:输入nacos信息,例如

微服务依赖问题_微服务依赖问题_09

 第四步:启动nacos,例如:

微服务依赖问题_java_10

 Maven 依赖问题

假如出现依赖下载不下来,或者pom.xml文件出错,一定要检查:
第一:依赖添加的是否正确(groupId,artifactId,version)
第二:检查元素嵌套关系(dependencies,dependency)
第三:检查父工程依赖是否有问题,单词是否正确
第四:检查maven环境配置(最好一个项目一个本地库,假如多个项目共用一个,要确保多各项目使用的依赖版本是一致的。)
 

项目克隆问题

克隆下的项目导入以后是如下问题:

微服务依赖问题_微服务_11

 这个问题,可以右键项目的p

微服务依赖问题_微服务依赖问题_12

om.xml文件,然后执行如下操作,将项目添加到maven区,例如:

JDK 配置问题

打开项目代码,是如

微服务依赖问题_后端_13

 如上问题,可以打开项目结构,然后配置JDK,例如

微服务依赖问题_微服务_14

Maven配置编译问题

我们使用的maven一般默认编译版本会采用JDK1.5,假如你希望为JDK8,可以在当前工程或父工程中添加如下,代码:

<build>
        <plugins>
            <!--修改maven编译版本-->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.1</version>
                <configuration>
                    <source>8</source>
                    <target>8</target>
                </configuration>
            </plugin>
        </plugins>
    </build>

我们也可以在每个工程的properties元素中设置指定当前工程的编译版本,例如:

<properties>
    <maven.compiler.source>8</maven.compiler.source>
    <maven.compiler.target>8</maven.compiler.target>
</properties>

服务注册异常(NacosException)

启动服务时,出现如下问题,例如:

微服务依赖问题_微服务依赖问题_15

微服务依赖问题_后端_16

 服务配置读取问题

微服务依赖问题_java_17

 配置文件格式问题

微服务依赖问题_java_18

 无法访问此网站

微服务依赖问题_后端_19

 pom.xml有删除横线

微服务依赖问题_微服务依赖问题_20

 访问404异常

微服务依赖问题_后端_21

 访问500异常

微服务依赖问题_拦截器_22

 例如,打开后台,假如出现了如下问题,就是你远程调用的服务url应该是写错了

微服务依赖问题_微服务_23

 例如:假如你的Consumer服务调用Provider服务,但是Provider服务没有启动就会出现如下问题:

微服务依赖问题_后端_24

 端口占用问题

微服务依赖问题_微服务依赖问题_25

 服务调用案例分析

微服务依赖问题_微服务依赖问题_26

 服务ID问题分析

项目配置文件中的spring.application.name属性值为服务id,服务注册到nacos以后的服务名就是这个id,后续可以基于这个服务id找到具体的服务实例,然后进行调用.

微服务依赖问题_微服务依赖问题_27

 Application Failed to Start

微服务依赖问题_后端_28

Maven Helper插件应用

微服务依赖问题_微服务依赖问题_29

微服务依赖问题_微服务_30

客户端调用异常(ClientException)

微服务依赖问题_后端_31

 @PathVariable 注解在@FeignClient中应用

微服务依赖问题_拦截器_32

 依赖注入失败(Bean Not Found)

微服务依赖问题_微服务依赖问题_33

 请求映射路径重复定义

微服务依赖问题_java_34

 @FeignClient注解名字问题

微服务依赖问题_java_35

 Feign远程调用超时

微服务依赖问题_后端_36

 图解服务调用方案

微服务依赖问题_拦截器_37

这张图描述了远程服务调用的几中方式:
第一种:服务比较少,例如就两个服务,一个服务消费,一个服务提供,就不需要注册中心,不需要负载均衡.
第二种:并发比较大,服务服务比较多,我们需要管理服务,就需要注册中心,我们还需要服务间的负载均衡.但代码编写的复杂多相对高一些,我们需要自己获取ip,获取端口,拼接字符串等.
第三种:我们要基于第二种进行代码简化,底层提供了一种拦截器,把基于服务名获取服务实例的过程在拦截器中做了封装,简化了代码的开发.但是加了拦截器多少会在性能少有一点损耗.
第四种方式主要是从代码结构上做一个挑战,我们前面三种基于RestTemplate进行服务调用,本身属于一种远程服务调用业务,能够将这种业务写到一个业务对象中,Feign方式就诞生了,它主要对代码结构的一种优化.

配置文件加载顺序

微服务依赖问题_后端_38

 拉取(Pull)配置信息

微服务依赖问题_java_39

Nacos配置中心模型

微服务依赖问题_拦截器_40

 

微服务依赖问题_拦截器_41

Tomcat 请求处理分析

微服务依赖问题_微服务依赖问题_42

 Java线程池构成分析

微服务依赖问题_java_43

线程池任务执行过程

微服务依赖问题_java_44

线程拒绝执行异常

微服务依赖问题_拦截器_45

 JDK 版本问题

微服务依赖问题_微服务_46

 Sentinel 控制台显示

微服务依赖问题_拦截器_47

微服务中的Sentinel日志

微服务依赖问题_拦截器_48

回顾Spring MVC 请求处理

Spring MVC 是spring框架中基于MVC设计思想实现的一个WEB模块,这个模块下的请求响应处理流程如下:

微服务依赖问题_微服务_49

其中:
第一:客户端向web服务(例如tomcat)发起请求。
第二:tomcat会调用Filter对请求进行预处理(例如请求编码处理,请求认证分析等)。
第三:请求经过滤器Filter处理过后会交给DispatcherServlet对象(负责资源调度,前端控制器),此对象基于url找到对应的请求处理链对象(HandlerExecutionChain)。
第四:DispatcherServlet获取了请求执行链之后,会首先调用请求执行链中拦截器(HandlerInterceptor)对象(这个对象会在@RestController之前执行).
第五:拦截器对象获取请求以后可以对请求先进行分析,例如记录请求次数,请求时间,然后控制对后端Controller的调用。
第六:拦截器允许请求去传递到Controller时,Controller对象会对请求进行处理,然后将处理结果还会交给MVC 拦截器。
第七:拦截器拿到响应结果以后对其进行分析处理(例如记录Controller方法执行结束的时间)
第八:拦截器将响应结果传递到DispatcherServlet对象。
第九:DispatcherServlet拿到响应结果以后,会基于响应数据的类型,调用相关处理器(Processer)进行处理。
第十:响应结果处理器对象对响应数据处理以后,会将其结果交给DispatcherServlet对象。
第十一:DispatcherServlet对象拿到响应数据的处理结果时,会将结果基于ServletResponse对象响应到客户端。

Sentinel 请求拦截分析

Sentinel对请求进行限流的原理分析,如图所示:

微服务依赖问题_后端_50

当我们在服务中添加了Sentinel依赖以后,Sentinel会为我们的服务提供一个SpringMVC拦截器,这个拦截器会对请求进行拦截,然后基于请求url获取sentinel控制台中设置好的流控规则,然后采用一定的算法对请求url要访问的资源进行流量限制。



Day06



Idea中启动Nacos

第一步:打开服务编辑配置,例如:

微服务依赖问题_微服务_51


第二步:添加Shell Script,例如:

微服务依赖问题_java_52


第三步:添加nacos相关信息,例如:

微服务依赖问题_后端_53



跨域访问问题

微服务依赖问题_java_54


微服务依赖问题_拦截器_55



Nacos 服务注册问题

微服务依赖问题_微服务依赖问题_56



文件上传404问题

微服务依赖问题_拦截器_57



请求资源405异常

微服务依赖问题_微服务依赖问题_58



请求资源500异常

微服务依赖问题_微服务_59



BeanCreationException 异常

微服务依赖问题_微服务_60



服务名无效或没有定义

微服务依赖问题_拦截器_61



Day07



网关配置文件问题

微服务依赖问题_拦截器_62



服务访问被拒绝(Connection refused)

微服务依赖问题_java_63



网关负载均衡调用流程分析

微服务依赖问题_微服务_64



503访问异常

微服务依赖问题_微服务依赖问题_65



Postman请求携带请求头

微服务依赖问题_拦截器_66



作业(homework)

第一:安装postman或者在idea中配置rest client应用
第二:尝试在文件上传服务上创建网关项目,客户端请求直接请求网关实现文件上传.



Day08



Debug调试

微服务依赖问题_微服务依赖问题_67



http Client 应用

微服务依赖问题_微服务依赖问题_68



503 异常分析

微服务依赖问题_微服务_69

微服务依赖问题_拦截器_70



修改文件上传工程结构

微服务依赖问题_后端_71



Day09



网关执行流程分析

微服务依赖问题_java_72



存在多个跨域设计

微服务依赖问题_拦截器_73



自定义执行链设计

微服务依赖问题_后端_74



Spring MVC 拦截器

微服务依赖问题_微服务_75



Spring框架生态设计

微服务依赖问题_微服务_76



Day10



JVM 参数说明

输出JVM类加载信息(假如想看类启动时,相关类的加载顺序,可以配置JVM参数: -XX:+TraceClassLoading)

微服务依赖问题_后端_77

调整JVM堆内存大小,并输出JVM 垃圾回收基本信息(假如设置JVM堆内存大小可以通过 -Xmx设置最大堆内存,-Xms设置最小堆内存,-XX:+PrintGC输出程序运行时的GC信息)

微服务依赖问题_拦截器_78



AOP 执行流程分析

微服务依赖问题_微服务_79



Day11



文件上传架构升级

微服务依赖问题_微服务依赖问题_80



SpringSecurity 执行流程

微服务依赖问题_java_81



JS中的断点调试

微服务依赖问题_微服务_82



Day12



单点登陆方案

方案1:将登录状态存储到redis等数据库,例如:

微服务依赖问题_微服务依赖问题_83


微服务依赖问题_java_84

方案2:将登录状态存储到jwt令牌中,例如:

微服务依赖问题_微服务依赖问题_85



401 认证异常

微服务依赖问题_拦截器_86


微服务依赖问题_微服务依赖问题_87



检查令牌

微服务依赖问题_微服务依赖问题_88

微服务依赖问题_微服务依赖问题_89



权限校验过程分析

微服务依赖问题_微服务_90



postman 上传文件

微服务依赖问题_微服务_91

微服务依赖问题_微服务_92



403 访问被拒绝

微服务依赖问题_拦截器_93



资源请求图标问题

微服务依赖问题_拦截器_94



Day13



Postman测试刷新令牌

微服务依赖问题_java_95



生成序列化ID

微服务依赖问题_拦截器_96



Idea&@Autowired

当使用@Autowired注解描述属性时,假如属性下有红色波浪线提示,可参考如下配置

微服务依赖问题_微服务_97