微服务依赖冲突

项目场景:

微服务依赖冲突导致网关启动失败


原因分析:

项目在启动网关的时候,报错如上图。 要求移除 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服务中添加标签

yaml 复制代码
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <optional>true</optional>
</dependency>

optional = true 的含义是

"我自己编译时需要这个依赖,但你不一定需要。要用的话你自己显式声明,我不强迫你。"

相关推荐
努力的小雨1 小时前
每天盯着屏幕写代码,我终于不想再凑合了
后端
海岳云舟1 小时前
springboot项目中使用AOP
后端
小稀土1231 小时前
5步跑通第一个迭代:敏捷研发管理平台落地最小闭环
后端
zz在掘金337081 小时前
Django 中间件全家桶背诵笔记
后端
斑鸠喳喳1 小时前
调度线程池执行器 ScheduledThreadPoolExecutor
后端
大哥43091 小时前
索引 mapping 与代码对不上:一次不报错的静默失效排查
后端
神魔皆以血嗜1 小时前
Java 存储金额
java·后端
大哥43091 小时前
模型名停用与分层降级:一次 LLM 链路的失败面设计
后端
橙子家2 小时前
对象状态与操作合法性异常【C# Exception 详解系列(二)】
后端