1 楼 @
florentino 说的“本质就是通过 http 调用,至于你说的 VO,DTO 那些东西,可以放在 api 里面让其他服务依赖,也可以不放,调用方自己实现,反正最后都是会被序列化和反序列化的”
以及 4 楼 @
123zouwen 说的“我觉得这是把单体思维代入到了微服务中. 分布式事务中间件个人觉得没有任何必要, 但很多 java 总希望能跟写单体服务一样直接 rpc 调用还能处理好事务.”
都非常对,是非常正确的微服务理念。基本上你从网上看到的绝大部分理论,都是指导你灵活使用,因为脱离了实际使用场景,并不会存在一个最佳实践。
而你困惑的地方在于,你没描述出来你们完整的工程场景,上面他们所说的都不足以解答你的疑惑,feign 用起来总是感觉有点不伦不类,对不对
我猜你是做 toB 的行业软件,业务逻辑复杂,功能点多,架构师又采用微服务形式,然后甚至一个功能模块一个微服务,从功能划分上倒是合理,但是呢,各模块之间的交付是很频繁及复杂的,互相调用的情况非常多, 硬套上微服务, 很难复用代码 & 控制事务, 如果各自解析 feign 的返回,还容易造成混乱(各种业务逻辑频繁变动、数据模型满天飞, 有些对象能有 200 多个属性)。
我是非常不建议也不喜欢大部分 toB 业务使用微服务开发的,不合适。
当然你们已经这么做了,我的建议是,各自模块的 DTO 、VO 、等 POJO ,自行维护。需要被其他模块调用的,复制一份 POJO 到 api 模块中,写好文档,做好代码同步即可。这样调用方不用关心如何解析,调用结果会自动转换为 POJO 对象,省心省事,又贴合单体应用的使用习惯。
有条件的话,还是从微服务的巨坑里爬出来吧。