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

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

  •  
  •   leyfung Feb 19, 2025 7223 views
    This topic created in 446 days ago, the information mentioned may be changed or developed.

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

    49 replies    2025-03-06 02:07:05 +08:00
    ccw4wcc
        1
    ccw4wcc  
       Feb 19, 2025
    可以把所有的工程放到一个大文件夹底下,idea 直接打开这个大文件夹,每个子文件夹都可以有自己单独的 git
    lucasdev
        2
    lucasdev  
       Feb 19, 2025   4
    xuanbg
        3
    xuanbg  
       Feb 19, 2025   9
    怪不得很多人都对微服务架构抱有成见,认为微服务架构使系统更加复杂。。。OP 你们这个确实。。。我只能说微服务不是这么玩的呀。

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

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

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

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

    2. Git 提交的时候,点那个眼睛图标,切换成 Group By Repository (默认是 Group By Directory)
    clf
        19
    clf  
       Feb 19, 2025
    @lucasdev #18 1 的话估计不行,JDK17 和 JDK8 在 gradle 的兼容上不一样(对的,我们用的 gradle ),JDK17 用的 8.2 ,JDK8 用的 6.8 。如果得都兼容估计得看看有没有都支持的版本,全部都得改了。
    Rat3
        20
    Rat3  
       Feb 19, 2025
    基建不行啊,开发单个微服务还得本地全给跑起来?
    leyfung
        21
    leyfung  
    OP
       Feb 19, 2025
    @Meld #20 业务开发比较忙,其他的还不完善
    potatowish
        22
    potatowish  
       Feb 19, 2025 via iPhone   1
    开发环境注册要依赖的远程服务,注册中心禁止本地注册
    lucasdev
        23
    lucasdev  
       Feb 19, 2025
    @clf #19 哦哦,那 1 的确比较尴尬,没法给 workspace 中的每个 module 单独设置 JDK
    leyfung
        24
    leyfung  
    OP
       Feb 19, 2025
    @lucasdev #2 这个挺合适的,感谢
    JohnSwit
        25
    JohnSwit  
       Feb 19, 2025
    @lucasdev #2 你好,问个问题,我试了一下,引入了多个项目,但是我们开发的分支都是不一致的,现在引进来后显示的分支都是 master ?这个如何处理,我想每个项目都显示现在所属的分支
    awalkingman
        26
    awalkingman  
       Feb 19, 2025
    微服务的本质不是模块的拆分,而是组织架构的拆分。
    HaibaraDP
        27
    HaibaraDP  
       Feb 19, 2025
    k8s 集群部署和一个 git 仓库 maven 多模块项目是哪里有冲突呢?
    lucasdev
        28
    lucasdev  
       Feb 19, 2025
    @JohnSwit 我试了一下是会同步各个 Project 的当前分支的。你选中某个 Project 中的一个文件,看显示的分支有没有变?

    你也可以点击分支的那个下拉框,里面会列出各个 Project 的当前分支,实在不行的话可以在那里手动切换。
    WashFreshFresh
        29
    WashFreshFresh  
       Feb 19, 2025
    @JohnSwit 右下角可以选中单独的仓库切换分支
    TofuBazinga
        30
    TofuBazinga  
       Feb 19, 2025
    请教一下微服务和拆 git 仓库有什么关系吗,要跑哪个服务,就打哪个 mudule 的镜像不就好了嘛,还是只是为了开发层面的解耦?不同团队维护不同服务,只负责自己的?
    sch1111878
        31
    sch1111878  
       Feb 19, 2025
    @xuanbg 说的对
    另外 1 楼说的也对
    sch1111878
        32
    sch1111878  
       Feb 19, 2025
    @Mrun 学习了学习了
    freemoon
        33
    freemoon  
       Feb 19, 2025
    go 里面不需要拆仓库,java 做不到?多问问。
    fanjinzhongju952
        34
    fanjinzhongju952  
       Feb 19, 2025
    @Mrun 这听起来像是字节
    tangqiu0205
        35
    tangqiu0205  
       Feb 19, 2025
    每次打开一个项目,选择附加就可以了。
    Tsssss
        36
    Tsssss  
       Feb 19, 2025
    maven submodules?
    Plutooo
        37
    Plutooo  
       Feb 19, 2025
    #1 的做法就可以
    L0L
        38
    L0L  
       Feb 19, 2025
    @xuanbg 针对这种公用环境场景,想再请教一个可能比较细节点的问题了?多人一起开发同一个服务时,是如何保障公用环境的 rpc 请求打到自己的服务节点上呢?因为公用服务的注册中心可能也是公用的情况。
    JohnSwit
        39
    JohnSwit  
       Feb 19, 2025
    @lucasdev #28 我重新创建了一个,已经可以显示各个项目的不同分支了,感谢哈
    DosLee
        40
    DosLee  
       Feb 19, 2025
    @xuanbg #3 顺便问一下,注册中心用的是 Nacos 吗?还是其他什么,最近被安全扫描折腾的不行,说 Nacos 存在版本漏洞
    xiaogu2014
        41
    xiaogu2014  
       Feb 19, 2025
    理论上不需要多 git 项目。monorepo 可以搞定。参考 bazel 。
    以及微服务不是指 repository 多个。是部署。每个里面可以指定不同的部署。
    Vraw5
        42
    Vraw5  
       Feb 19, 2025
    我们就是 Maven 模块化的结构,K8s 部署没影响,修改哪个模块就打哪个模块的包部署
    LowBi
        43
    LowBi  
       Feb 19, 2025 via iPhone
    我一个服务开一个 idea 窗口不用就关掉
    wtsm
        44
    wtsm  
       Feb 19, 2025 via Android
    感觉微服务累死,feign 接口写累死
    Hakari
        45
    Hakari  
       Feb 19, 2025
    @xuanbg 请教下那如果多个人需要调试同一服务怎么办
    prosgtsr
        46
    prosgtsr  
       Feb 19, 2025
    File -> new -> Module from Existing Sources...
    不谢,我就是这么开发的。我一打开就是二三十个微务,下次只要用 idea 打开同一个地方,还是这二三十个微服务一起打开了
    thevita
        47
    thevita  
       Feb 19, 2025
    我怎么感觉 “现在为了 k8s 集群部署,就把服务拆分出去,每个服务一个单独的仓库。” 这里槽点最大啊

    代码组织方式应该是服务于开发团队的协作方式的,而不是紧急为了在 k8s 上部署(就是所有代码都在一个仓库里也不是就不能在 k8s 上部署了啊,无非就是 google 搜不到而已..,看不懂)就这么大动干戈的让所有人去适配机器,,,
    leyfung
        48
    leyfung  
    OP
       Feb 20, 2025
    @TofuBazinga #30 一个是为了部署,都放在一个项目里面,属于 Maven 模块化工程,打包的时候,会打包所有的,拆出来,就可以独立打包,构建镜像、部署。二是为了解耦,每个服务不同的组在开发。
    BinCats
        49
    BinCats  
       Mar 6, 2025
    不需要的都打 Maven 包就好了啊
    About     Help     Advertise     Blog     API     FAQ     Solana     1209 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 151ms UTC 23:28 PVG 07:28 LAX 16:28 JFK 19:28
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86