V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
leyfung
V2EX  ›  Java

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

  •  
  •   leyfung · 2 天前 · 3742 次点击

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

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

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

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

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

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

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

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

    代码组织方式应该是服务于开发团队的协作方式的,而不是紧急为了在 k8s 上部署(就是所有代码都在一个仓库里也不是就不能在 k8s 上部署了啊,无非就是 google 搜不到而已..,看不懂)就这么大动干戈的让所有人去适配机器,,,
    leyfung
        48
    leyfung  
    OP
       1 天前
    @TofuBazinga #30 一个是为了部署,都放在一个项目里面,属于 Maven 模块化工程,打包的时候,会打包所有的,拆出来,就可以独立打包,构建镜像、部署。二是为了解耦,每个服务不同的组在开发。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2761 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 12:57 · PVG 20:57 · LAX 04:57 · JFK 07:57
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.