微服务依赖冲突

项目场景:

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


原因分析:

项目在启动网关的时候,报错如上图。 要求移除 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 的含义是

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

相关推荐
努力的小雨4 分钟前
别再复制日志给AI了!我让Codex自己去观测云查报错
后端
afumu2 小时前
Go 写一个只监听 127.0.0.1 的控制服务:鉴权、白名单、危险命令拦截
后端·安全·go
johnjincaaaa3 小时前
猿人学第 18 题「jsvmp 洞察先机」逆向通关实录
javascript·后端
用户4702784004053 小时前
C语言编译与链接
后端·开源
你三大爷3 小时前
从 Hessian 迁移到 protostuff:深嵌套模型反序列化耗时与高并发类加载锁的根治实战
后端·架构
IT枫斗者枫哥3 小时前
子线程断言失败,JUnit 为什么还显示通过?
java·后端
stark张宇5 小时前
Vibe Coding 入门实战:用 Claude Code 跑通 AI 产品开发流程(上)
后端·claude·vibecoding
考虑考虑5 小时前
JDK27中的Set.ofLazy
java·后端·java ee
乌暮7 小时前
Spring AOP 与 Spring 事务:用大白话彻底理解原理与实践
java·数据库·spring boot·后端·sql·学习·spring
我不会起名字3227 小时前
未接入最终读上限的参数:`websocketMaxMsgLen` 与 12.5 倍差距
后端·websocket·go·即时通讯·im·故障排查