项目场景:微服务依赖冲突导致网关启动失败原因分析:项目在启动网关的时候,报错如上图。要求移除spring-boot-starter-web依赖,经过查找发现geteway中使用WebFlux(Reactor + Netty,响应式)和spring-boot-starter-web(Servlet + Tomcat,阻塞式)冲突,导致项目直接不进行启动。1. 为什么网关不能用MVC网关的主要作用是负载均衡,要从Nacos中拉取服务,并在多个服务之间进行实例转发,如果使用mvc的话,每个请求占用一个线程,在高并发的情况下,线程池很快被沾满,网关就直接拖垮,而cloud中的WebFlux用很少量的线程就能抗住2. 为什么这两者不能共存它们的servlet模型和Reactor模型是两种完全不同的执行模型,同时会导致SpringBoot无法确定使用哪套初始化应用上下文,只能报错退出解决方案:在common服务中添加标签<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><optional>true</optional></dependency>optional = true 的含义是“我自己编译时需要这个依赖,但你不一定需要。要用的话你自己显式声明,我不强迫你。”
项目场景:微服务依赖冲突导致网关启动失败原因分析:项目在启动网关的时候,报错如上图。要求移除spring-boot-starter-web依赖,经过查找发现geteway中使用WebFlux(Reactor + Netty,响应式)和spring-boot-starter-web(Servlet + Tomcat,阻塞式)冲突,导致项目直接不进行启动。1. 为什么网关不能用MVC网关的主要作用是负载均衡,要从Nacos中拉取服务,并在多个服务之间进行实例转发,如果使用mvc的话,每个请求占用一个线程,在高并发的情况下,线程池很快被沾满,网关就直接拖垮,而cloud中的WebFlux用很少量的线程就能抗住2. 为什么这两者不能共存它们的servlet模型和Reactor模型是两种完全不同的执行模型,同时会导致SpringBoot无法确定使用哪套初始化应用上下文,只能报错退出解决方案:在common服务中添加标签<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><optional>true</optional></dependency>optional = true 的含义是“我自己编译时需要这个依赖,但你不一定需要。要用的话你自己显式声明,我不强迫你。”