背景:原本的微服务项目所有的服务都是以 Maven 模块化的结构来做的,就一个 git 仓库。现在为了 k8s 集群部署,就把服务拆分出去,每个服务一个单独的仓库。 问题:本地开发 IDEA 需要打开很多服务,之前只用开一个 IDEA ,批量启动,现在比之前麻烦了很多,想问问,大家有什么好的解决办法?
1
ccw4wcc 2 天前
可以把所有的工程放到一个大文件夹底下,idea 直接打开这个大文件夹,每个子文件夹都可以有自己单独的 git
|
![]() |
2
lucasdev 2 天前 ![]() IDEA 去年刚支持的 workspace ,很好用: https://blog.jetbrains.com/zh-hans/idea/2024/09/workspaces-in-intellij-idea/
|
![]() |
3
xuanbg 2 天前 ![]() 怪不得很多人都对微服务架构抱有成见,认为微服务架构使系统更加复杂。。。OP 你们这个确实。。。我只能说微服务不是这么玩的呀。
一个正经的微服务,一般都是一个服务一个仓库。你要开发哪个服务就拉哪个仓库的代码。然后,开发微服务不需要你把整个系统代码都拉下来,然后在本地运行全部的服务。而是有一个公共的开发环境,上面运行全部的服务实例。你需要调试的话,把自己本地的 debug 模式运行的服务注册到开发环境,同时把开发环境的那个实例注销掉。这样,调用链路就能把请求打到你本地了进行调试了。 |
![]() |
5
Dreamerwwr 2 天前
@xuanbg 这个不错,其实主要是环境配置上
|
6
imokkkk 2 天前
1 楼正解
|
![]() |
7
Manley 2 天前
代码拉到一个目录下,用 IDEA 打开某个项目,右边栏 Maven 标签里,直接点加号把其他模块引进来就行
|
![]() |
10
clf 2 天前
@lucasdev 提问,workspace 是不是不支持不同 JDK 版本的微服务一起打开。我们现在在进行 JDK8 到 JDK17 升级,会存在两个版本的 JDK 并存。然后好像只能设置一个 JDK 版本。
|
![]() |
11
clf 2 天前
@lucasdev 试了一下发现有些问题,比如 git 提交的时候,我同时改了 2 个项目,提交就会同时选择两个项目的内容。然后如果版本分支不一样的话,还不能用页面上的 git 随意切换。
|
12
Whiplash55 2 天前
|
![]() |
14
wxw752 2 天前
打开整个 workspace ,然后右边 maven 把项目都加进来
|
![]() |
15
janus77 2 天前
换微服务了以后,正常情况下应该是不同的人负责不同的仓库,而不是一个人开发多个仓库代码,这才能体现拆分的好处来,你这样搞,优势没了,开发模式还是跟单体一样
感觉最根本的方法,分成多人开发模式,要么就恢复单体服务的架构。 |
![]() |
17
xuanbg 2 天前 ![]() @Whiplash55 我无法直接回答你的问题。
我认为微服务解决的是系统复杂度过高的问题。说到底,微服务就是一种对逻辑的封装模式而已。通过合理拆分服务,在服务层面实现高内聚低耦合、且正交的业务逻辑的封装。 当然,整体的复杂度并不因为服务拆分而降低。但很大一部分复杂度可以从开发转移到运维。所以,要玩微服务,先得有自动化运维的能力,不然肯定搞不定。 |
![]() |
18
lucasdev 2 天前
@clf #11 1. 可以一起打开,JDK 是在 workspace 级别设置,在这里设置一个高版本的 JDK 。不同的 java.version 在各个服务的 pom.xml 中声明
2. Git 提交的时候,点那个眼睛图标,切换成 Group By Repository (默认是 Group By Directory) |
![]() |
19
clf 2 天前
@lucasdev #18 1 的话估计不行,JDK17 和 JDK8 在 gradle 的兼容上不一样(对的,我们用的 gradle ),JDK17 用的 8.2 ,JDK8 用的 6.8 。如果得都兼容估计得看看有没有都支持的版本,全部都得改了。
|
![]() |
20
Meld 2 天前
基建不行啊,开发单个微服务还得本地全给跑起来?
|
![]() |
22
potatowish 2 天前 via iPhone ![]() 开发环境注册要依赖的远程服务,注册中心禁止本地注册
|
25
JohnSwit 2 天前
@lucasdev #2 你好,问个问题,我试了一下,引入了多个项目,但是我们开发的分支都是不一致的,现在引进来后显示的分支都是 master ?这个如何处理,我想每个项目都显示现在所属的分支
|
![]() |
26
awalkingman 2 天前
微服务的本质不是模块的拆分,而是组织架构的拆分。
|
27
HaibaraDP 2 天前
k8s 集群部署和一个 git 仓库 maven 多模块项目是哪里有冲突呢?
|
![]() |
28
lucasdev 2 天前
@JohnSwit 我试了一下是会同步各个 Project 的当前分支的。你选中某个 Project 中的一个文件,看显示的分支有没有变?
你也可以点击分支的那个下拉框,里面会列出各个 Project 的当前分支,实在不行的话可以在那里手动切换。 |
29
WashFreshFresh 2 天前
@JohnSwit 右下角可以选中单独的仓库切换分支
|
30
TofuBazinga 2 天前
请教一下微服务和拆 git 仓库有什么关系吗,要跑哪个服务,就打哪个 mudule 的镜像不就好了嘛,还是只是为了开发层面的解耦?不同团队维护不同服务,只负责自己的?
|
31
sch1111878 2 天前
@xuanbg 说的对
另外 1 楼说的也对 |
32
sch1111878 2 天前
@Mrun 学习了学习了
|
![]() |
33
lasuar 2 天前
go 里面不需要拆仓库,java 做不到?多问问。
|
![]() |
34
fanjinzhongju952 2 天前
@Mrun 这听起来像是字节
|
![]() |
35
tangqiu0205 2 天前
每次打开一个项目,选择附加就可以了。
|
36
Tsssss 2 天前
maven submodules?
|
37
Plutooo 2 天前
#1 的做法就可以
|
![]() |
38
L0L 2 天前
@xuanbg 针对这种公用环境场景,想再请教一个可能比较细节点的问题了?多人一起开发同一个服务时,是如何保障公用环境的 rpc 请求打到自己的服务节点上呢?因为公用服务的注册中心可能也是公用的情况。
|
41
xiaogu2014 2 天前
理论上不需要多 git 项目。monorepo 可以搞定。参考 bazel 。
以及微服务不是指 repository 多个。是部署。每个里面可以指定不同的部署。 |
42
Vraw5 2 天前
我们就是 Maven 模块化的结构,K8s 部署没影响,修改哪个模块就打哪个模块的包部署
|
![]() |
43
LowBi 2 天前 via iPhone
我一个服务开一个 idea 窗口😬不用就关掉
|
44
wtsm 2 天前 via Android
感觉微服务累死,feign 接口写累死
|
46
prosgtsr 2 天前
File -> new -> Module from Existing Sources...
不谢,我就是这么开发的。我一打开就是二三十个微服务,下次只要用 idea 打开同一个地方,还是这二三十个微服务一起打开了 |
47
thevita 2 天前
我怎么感觉 “现在为了 k8s 集群部署,就把服务拆分出去,每个服务一个单独的仓库。” 这里槽点最大啊
代码组织方式应该是服务于开发团队的协作方式的,而不是紧急为了在 k8s 上部署(就是所有代码都在一个仓库里也不是就不能在 k8s 上部署了啊,无非就是 google 搜不到而已..,看不懂)就这么大动干戈的让所有人去适配机器,,, |
![]() |
48
leyfung OP @TofuBazinga #30 一个是为了部署,都放在一个项目里面,属于 Maven 模块化工程,打包的时候,会打包所有的,拆出来,就可以独立打包,构建镜像、部署。二是为了解耦,每个服务不同的组在开发。
|