微服务问题总结

目录

项目结构分析

 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文件删除线在这里插入图片描述

 MySQL的版本问题

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

在这里插入图片描述

 Nacos服务启动问题

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

在这里插入图片描述

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

在这里插入图片描述问题3:启动命令用错位置

在这里插入图片描述

 idea中启动nacos

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

在这里插入图片描述

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

在这里插入图片描述

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

在这里插入图片描述

 第四步:启动nacos,例如:

在这里插入图片描述

 Maven 依赖问题

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

项目克隆问题

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

在这里插入图片描述

 这个问题,可以右键项目的p在这里插入图片描述om.xml文件,然后执行如下操作,将项目添加到maven区,例如:

JDK 配置问题

打开项目代码,是如在这里插入图片描述

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

在这里插入图片描述

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)

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

在这里插入图片描述

在这里插入图片描述

 服务配置读取问题

在这里插入图片描述

 配置文件格式问题

在这里插入图片描述

 无法访问此网站

在这里插入图片描述

 pom.xml有删除横线

在这里插入图片描述

 访问404异常

在这里插入图片描述

 访问500异常

在这里插入图片描述

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

在这里插入图片描述

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

在这里插入图片描述

 端口占用问题

在这里插入图片描述

 服务调用案例分析

在这里插入图片描述

 服务ID问题分析

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

在这里插入图片描述

 Application Failed to Start

在这里插入图片描述

Maven Helper插件应用

在这里插入图片描述

在这里插入图片描述

客户端调用异常(ClientException)

在这里插入图片描述

 @PathVariable 注解在@FeignClient中应用

在这里插入图片描述

 依赖注入失败(Bean Not Found)

在这里插入图片描述

 请求映射路径重复定义

在这里插入图片描述

 @FeignClient注解名字问题

在这里插入图片描述

 Feign远程调用超时

在这里插入图片描述

 图解服务调用方案

在这里插入图片描述

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

配置文件加载顺序

在这里插入图片描述
 拉取(Pull)配置信息

在这里插入图片描述

Nacos配置中心模型

在这里插入图片描述

 在这里插入图片描述

Tomcat 请求处理分析

在这里插入图片描述

 Java线程池构成分析

在这里插入图片描述

线程池任务执行过程

在这里插入图片描述

线程拒绝执行异常

在这里插入图片描述

 JDK 版本问题

在这里插入图片描述

 Sentinel 控制台显示

在这里插入图片描述

微服务中的Sentinel日志

在这里插入图片描述

回顾Spring MVC 请求处理

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

在这里插入图片描述

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

Sentinel 请求拦截分析

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

在这里插入图片描述

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





Day06





Idea中启动Nacos

第一步:打开服务编辑配置,例如:
在这里插入图片描述
第二步:添加Shell Script,例如:

在这里插入图片描述
第三步:添加nacos相关信息,例如:
在这里插入图片描述





跨域访问问题

在这里插入图片描述
在这里插入图片描述





Nacos 服务注册问题

在这里插入图片描述





文件上传404问题

在这里插入图片描述





请求资源405异常

在这里插入图片描述





请求资源500异常

在这里插入图片描述





BeanCreationException 异常

在这里插入图片描述





服务名无效或没有定义

在这里插入图片描述





Day07





网关配置文件问题

在这里插入图片描述





服务访问被拒绝(Connection refused)

在这里插入图片描述





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

在这里插入图片描述





503访问异常

在这里插入图片描述





Postman请求携带请求头

在这里插入图片描述





作业(homework)

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





Day08





Debug调试

在这里插入图片描述





http Client 应用

在这里插入图片描述





503 异常分析

在这里插入图片描述

在这里插入图片描述





修改文件上传工程结构

在这里插入图片描述





Day09





网关执行流程分析

在这里插入图片描述





存在多个跨域设计

在这里插入图片描述





自定义执行链设计

在这里插入图片描述





Spring MVC 拦截器

在这里插入图片描述





Spring框架生态设计

在这里插入图片描述





Day10





JVM 参数说明

输出JVM类加载信息(假如想看类启动时,相关类的加载顺序,可以配置JVM参数: -XX:+TraceClassLoading)
在这里插入图片描述

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





AOP 执行流程分析

在这里插入图片描述





Day11





文件上传架构升级

在这里插入图片描述





SpringSecurity 执行流程

在这里插入图片描述





JS中的断点调试

在这里插入图片描述





Day12





单点登陆方案

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

在这里插入图片描述
在这里插入图片描述

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

在这里插入图片描述





401 认证异常

在这里插入图片描述
在这里插入图片描述





检查令牌

在这里插入图片描述

在这里插入图片描述





权限校验过程分析

在这里插入图片描述





postman 上传文件

在这里插入图片描述

在这里插入图片描述





403 访问被拒绝

在这里插入图片描述





资源请求图标问题

在这里插入图片描述





Day13





Postman测试刷新令牌

在这里插入图片描述





生成序列化ID

在这里插入图片描述





Idea&@Autowired

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