基于Spring Cloud gateway & Springmvc服务合并
基于Spring Cloud gateway & Springmvc服务合并
背景
当前项目中,服务拆分的粒度太小,每个服务都需要单独启动一个jvm进程,导致服务器内存不足,因此需要对微服务做合并
目标
合并服务,降低内存使用
现状
服务A:业务服务,和具体业务逻辑相关;url = /serviceA/**, context-path=/serviceA
服务B:通用服务,主要是发送短信,文件上传等功能;url = /serviceB/**, context-path=/serviceB
1、服务A和服务B的subpath没有冲突
2、服务A和服务B的数据库是同一个
3、application.yml只有基础的内容,大部分配置都在nacos上
因此,可以考虑直接合并
具体思路是,服务B变成一个通用java jar,由服务A引入
问题
1、原有的路由规则需要调整
2、serviceB的url将会从/serviceB/**变成/serviceB/**
实施
serviceB变成普通jar
删除application.yml
删除Application类(包含main方法的类)
删除springboot maven plugin
添加普通打包插件
修改nacos配置,去掉数据库等和serviceA重复的内容
serviceA引入serviceB
添加serviceB jar依赖
componentScan添加serviceB 根路径 (@ComponentScan)
mapper添加serviceB mapper根路径 (@MapperScan)
application.yml 引入 serviceB的nacos配置
serviceB路径转发
首先在serviceB中添加拦截器,将/serviceA/serviceB/xxx 转发到/serviceB/xxx
网关转发
FeignClient改造
name:服务提供方id,这里需要改成serviceA
contextId:beanId,防止冲突,还是配置下比较保险
path:因为url都变成为/serviceA/serviceB/**了,所以这里需要加上/serviceA统一前缀
部署升级
1、升级serviceA
2、serviceB调用方依次升级,观察
3、gateway转发规则更新,重启,观察
4、无流量后下掉serviceB
最后更新于