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

最近接手了几个 Java springboot 项目,看能让你吐血不

  •  
  •   3kkkk · 2022-01-11 14:50:29 +08:00 · 5656 次点击
    这是一个创建于 1041 天前的主题,其中的信息可能已经有所发展或是发生改变。

    最近接手了几个 java springboot 项目,看到代码一刻血往上涌血压有点快压不住了。各位大神帮分析下什么样的项目会这样做。 api 服务接收传参定义 json 串->转 map->拼接参数 bean->转 json 串-> feign 调用第二个服务->接收 json 串->转 map->拼接参数 bean-> feign 调用第三个服务->接收 json 串->转 map->拼接入库参数 ——>返回到第二个服务数据库->json 转 bean->入库并返参。

    而且吧三个服务没有做链路追踪处理,并且 feign 调用不打印调用日志。出一个问题排查到泪奔。

    24 条回复    2022-01-13 11:37:11 +08:00
    xuanbg
        1
    xuanbg  
       2022-01-11 15:18:34 +08:00
    我只能表示写这种代码的人非蠢即坏,🤷‍♂️

    写代码简单直接一点不好吗,非得绕来绕去。
    powerman
        2
    powerman  
       2022-01-11 15:52:41 +08:00
    Spring Cloud Sleuth
    Kaiv2
        3
    Kaiv2  
       2022-01-11 16:00:29 +08:00
    用下 http://skywalking.apache.org/ 排查问题非常方便
    3kkkk
        4
    3kkkk  
    OP
       2022-01-11 16:20:29 +08:00
    @xuanbg 应该感觉这就是微服务吧,本来一个方法或封装一个工具类的事。非要跳转一个服务。多做几次序列化。
    392039757
        5
    392039757  
       2022-01-11 16:20:33 +08:00
    猜测是因为 feign 的 RequestBody 只能有一个,非得传多个的时候又得写一个对象,用 map 可以直接 get 出来
    xuanbg
        6
    xuanbg  
       2022-01-11 16:54:17 +08:00
    @3kkkk 我司微服务根本不这么干啊,服务间调用不是没有,但全都是上层业务服务调用下层基础服务,而且调用链就只有 1 层。哪有 A 调用 B ,B 再调用 C ,然后依次返回数据这种事情。业务间通信也不是没有,但都是通过消息队列实现的,从来就不用 feign 。
    v2gf
        7
    v2gf  
       2022-01-11 17:02:33 +08:00
    强行微服务的后果
    xlsepiphone
        8
    xlsepiphone  
       2022-01-11 17:05:33 +08:00 via Android
    单应用就没这些破事了
    shyangs
        9
    shyangs  
       2022-01-11 17:22:26 +08:00
    濫用微服務.

    調用一個服務,要經過 3~5 個微服務主機,然後使用者說服務怎麼這麼慢.

    網路 IO(微服務)遠慢於記憶體(單體), 時間都消耗在序列化、反序列化、網路傳遞上面了. PG 怎麼優化都幹不過架構師的渣架構.
    oneisall8955
        10
    oneisall8955  
       2022-01-11 17:38:33 +08:00
    真·代码和你,一个能跑就行
    banmuyutian
        11
    banmuyutian  
       2022-01-11 17:45:18 +08:00   ❤️ 5
    A 君用 json 传参,B 君用 Map 传参,C 君用 java bean 传参,他们和微服务一起构成这座屎山
    boris93
        12
    boris93  
       2022-01-11 18:01:18 +08:00 via iPhone
    谢谢,已经在替你想辞职之前怎么开喷了
    newxhk
        13
    newxhk  
       2022-01-11 19:14:50 +08:00 via iPhone
    雖然不做後端,但看到已經想跑路了
    ZSeptember
        14
    ZSeptember  
       2022-01-11 20:24:09 +08:00 via iPhone
    和 spring boot 无关,和程序员有关
    akin
        15
    akin  
       2022-01-11 20:46:20 +08:00
    这样串联,直接上 kafka 吧
    byte10
        16
    byte10  
       2022-01-11 21:39:44 +08:00
    (⊙o⊙)… 以前也有接收过一个项目全是 map 参数的接口,我估计这样写是方便吧,不用 class 对象,直接当脚本语言开发,休休的快。😂
    cocang
        17
    cocang  
       2022-01-12 00:24:02 +08:00
    看文字已经头皮发麻了,我觉得这是技术能力或者逻辑能力不够的问题,这是纯坏吧
    ixx
        18
    ixx  
       2022-01-12 09:06:09 +08:00
    故事要从第一个 springboot demo 开始.....
    dengji85
        19
    dengji85  
       2022-01-12 09:17:11 +08:00
    服务之间不依赖实体,调用不就是 json 吗,而且参数容易扩展,只是多级调用搞复杂了
    3kkkk
        20
    3kkkk  
    OP
       2022-01-12 09:50:08 +08:00
    @xuanbg 我之前公司也没这样干过啊。大小项目参与加起来有上百个,也是第一次碰到。
    sumulige
        21
    sumulige  
       2022-01-12 13:01:29 +08:00
    个人征信报文吧
    remember5
        22
    remember5  
       2022-01-12 14:57:16 +08:00
    @banmuyutian #11 赞同
    abcbuzhiming
        23
    abcbuzhiming  
       2022-01-12 16:58:48 +08:00
    很简单,动态语言写多了的结果,不愿意使用强类型约束数据结构,所以就用 map ,灵活彻底,就是接收的人要骂娘
    KevinBlandy
        24
    KevinBlandy  
       2022-01-13 11:37:11 +08:00
    我也刚接手维护了一个 sb ( SpringBpoot )开发的项目。一言难尽。
    1 ,登录用 GET 请求
    2 ,不用 spring-data-redis ,自己写代码读配置文件创建 JedisPool
    3 ,上传文件等等跟数据库没关系的业务方法,都开启了事务
    4 ,HTTP 调用,使用的是`java.net.URLConnection`
    5 ,客户端提交的数据,没有任何校验
    6 ,IO 操作各种不 close 资源
    ...

    领导说这系统不好用,也要新增一些功能。让我维护改改。。。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   6269 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 34ms · UTC 02:31 · PVG 10:31 · LAX 18:31 · JFK 21:31
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.