Java 微服务项目,多 git 仓库的时候,怎么方便在 IDEA 开发

39 天前
leyfung  leyfung

背景:原本的微服务项目所有的服务都是以 Maven 模块化的结构来做的,就一个 git 仓库。现在为了 k8s 集群部署,就把服务拆分出去,每个服务一个单独的仓库。 问题:本地开发 IDEA 需要打开很多服务,之前只用开一个 IDEA ,批量启动,现在比之前麻烦了很多,想问问,大家有什么好的解决办法?

4523 次点击
所在节点   Java  Java
49 条回复
ccw4wcc
ccw4wcc
39 天前
可以把所有的工程放到一个大文件夹底下,idea 直接打开这个大文件夹,每个子文件夹都可以有自己单独的 git
lucasdev
lucasdev
39 天前
xuanbg
xuanbg
39 天前
怪不得很多人都对微服务架构抱有成见,认为微服务架构使系统更加复杂。。。OP 你们这个确实。。。我只能说微服务不是这么玩的呀。

一个正经的微服务,一般都是一个服务一个仓库。你要开发哪个服务就拉哪个仓库的代码。然后,开发微服务不需要你把整个系统代码都拉下来,然后在本地运行全部的服务。而是有一个公共的开发环境,上面运行全部的服务实例。你需要调试的话,把自己本地的 debug 模式运行的服务注册到开发环境,同时把开发环境的那个实例注销掉。这样,调用链路就能把请求打到你本地了进行调试了。
lscho
lscho
39 天前
@xuanbg 所以这不就是“使系统更加复杂”了吗。。。共的开发环境不可能比本地调试方便的,特别是好几个人都在用公共环境的情况下。
Dreamerwwr
Dreamerwwr
39 天前
@xuanbg 这个不错,其实主要是环境配置上
imokkkk
imokkkk
39 天前
1 楼正解
Manley
Manley
39 天前
代码拉到一个目录下,用 IDEA 打开某个项目,右边栏 Maven 标签里,直接点加号把其他模块引进来就行
xuanbg
xuanbg
39 天前
@lscho 我们正常几乎没有本地 debug 的情况,有什么问题看日志就解决了。除非是日志中看不出来错误的原因,才会进 debug 模式跟跟看数据是不是正常。
Mrun
Mrun
39 天前
@lscho #4
不会的,我司都是流量打标,不需要把开发环境的服务注销掉。在网关入口带上自定义的 header 头,就可以自动把流量导入到本地了。方便的很
clf
clf
39 天前
@lucasdev 提问,workspace 是不是不支持不同 JDK 版本的微服务一起打开。我们现在在进行 JDK8 到 JDK17 升级,会存在两个版本的 JDK 并存。然后好像只能设置一个 JDK 版本。
clf
clf
39 天前
@lucasdev 试了一下发现有些问题,比如 git 提交的时候,我同时改了 2 个项目,提交就会同时选择两个项目的内容。然后如果版本分支不一样的话,还不能用页面上的 git 随意切换。
Whiplash55
Whiplash55
39 天前
@xuanbg

想请教一下,什么样的业务场景或者多大的流量需要用到微服务架构的?我看一堆内部系统都要上微服务完全搞不懂性价比在哪里
xuanbg
xuanbg
39 天前
@Mrun 你们这个办法更好
wxw752
wxw752
39 天前
打开整个 workspace ,然后右边 maven 把项目都加进来
janus77
janus77
39 天前
换微服务了以后,正常情况下应该是不同的人负责不同的仓库,而不是一个人开发多个仓库代码,这才能体现拆分的好处来,你这样搞,优势没了,开发模式还是跟单体一样
感觉最根本的方法,分成多人开发模式,要么就恢复单体服务的架构。
leyfung
leyfung
39 天前
@janus77 #15 是不同的人负责不同的服务,但是要远程调用 API ,要启动一些公共服务,比如 gateway 、auth 、system
xuanbg
xuanbg
39 天前
@Whiplash55 我无法直接回答你的问题。

我认为微服务解决的是系统复杂度过高的问题。说到底,微服务就是一种对逻辑的封装模式而已。通过合理拆分服务,在服务层面实现高内聚低耦合、且正交的业务逻辑的封装。

当然,整体的复杂度并不因为服务拆分而降低。但很大一部分复杂度可以从开发转移到运维。所以,要玩微服务,先得有自动化运维的能力,不然肯定搞不定。
lucasdev
lucasdev
39 天前
@clf #11 1. 可以一起打开,JDK 是在 workspace 级别设置,在这里设置一个高版本的 JDK 。不同的 java.version 在各个服务的 pom.xml 中声明

2. Git 提交的时候,点那个眼睛图标,切换成 Group By Repository (默认是 Group By Directory)
clf
clf
39 天前
@lucasdev #18 1 的话估计不行,JDK17 和 JDK8 在 gradle 的兼容上不一样(对的,我们用的 gradle ),JDK17 用的 8.2 ,JDK8 用的 6.8 。如果得都兼容估计得看看有没有都支持的版本,全部都得改了。
Meld
39 天前
基建不行啊,开发单个微服务还得本地全给跑起来?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1112513

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX