目录
@PathVariable 注解在@FeignClient中应用
项目结构分析
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环境配置(最好一个项目一个本地库,假如多个项目共用一个,要确保多各项目使用的依赖版本是一致的。)
项目克隆问题
克隆下的项目导入以后是如下问题:
这个问题,可以右键项目的pom.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注解描述属性时,假如属性下有红色波浪线提示,可参考如下配置