微服务业务模块间的调用如何解耦?

跨模块解耦设计

大家好,我是小玺,今天给大家分享一下前几年我在分布式项目中业务模块间的调用如何解耦。

1、设计背景

目前市场需求参差不齐且不景气,大公司也都在"裁员广进",预算基本都缩减,客户在预算比较紧张的情况下,对于软件的需求也只能挑着重点去购买,有时客户仅需要产品的某些业务模块+自有的系统灵活搭配。例如物流行业经典OTWB,预算问题导致只购买W或者T业务,因此需要对完整的OTWB进行解耦,单独部署且使用。 (PS:懂得都懂,不可能去用一堆的if-else屎山代码每个操作都去判断,成本高且不易维护,代码健壮性不得劲)

2、设计说明

将涉及跨模块调用的项目代码进行抽离,达到各个业务模块解耦

3、UML设计

说明
对象 说明
用户 系统操作用户
后端接口 用户界面操作后,实际调用后台的接口
跨模块调用接口 仅提供当前业务模块涉及跨模块调用接口供后端接口调用(不包含具体的跨模块逻辑实现)
模块调用默认实现类 对【跨模块调用接口】进行跨模块的逻辑实现(产品默认实现逻辑)
模块调用第三方实现类 对【跨模块调用接口】进行跨模块的逻辑实现(根据项目情况定制化开发)
步骤
复制代码
1、用户前端发起请求
2、调用跨模块抽离的接口方法
3、根据模块实现配置调用项目中公司内部提供的【模块调用默认实现类】,或者客户方提供的【模块调用第三方实现类】
4、跨模块实现成功返回请求结果
5、模块调用接口反馈结果到业务模块
6、业务模块继续走请求的其它代码逻辑
7、业务接口请求返回请求成功

4、设计思路

对代码中跨模块调用的地方,将跨模块调用的功能抽离成一个接口,并对该接口的实现区分为系统默认实现模块和第三方实现模块,原项目中相关跨模块调用逻辑实现代码抽离到系统默认实现模块,项目上通过跨模块调用配置选择模块调用走系统默认实现还是第三方实现。

若选择第三方实现模块,则不再引用系统默认实现模块(包含了其它各个业务模块的代码依赖),从而实现业务模块间的解耦,单一业务模块也能正常使用。

以上就是关于微服务的解耦设计。欢迎大家各抒己见,有什么好的思路和建议一起交流。

相关推荐
code_slave(码畜)7 小时前
微服务架构落地:基础服务 —— 报表服务(中篇:元数据、查询引擎、缓存与权限落地)
spring boot·spring cloud·缓存·微服务·架构
code_slave(码畜)8 小时前
微服务架构落地:基础服务 —— 报表服务(AI 集成篇:AI 增强报表能力)
人工智能·spring boot·spring cloud·微服务·架构
code_slave(码畜)9 小时前
微服务架构落地:公共中间件层总览——不承载业务,只承载稳定性
spring boot·spring cloud·微服务·中间件·架构
Thomas.Sir17 小时前
第13课:Spring Cloud LoadBalancer 新版负载均衡核心原理
spring cloud·负载均衡
code_slave(码畜)17 小时前
微服务架构落地:基础服务 —— 报表服务(上篇:定位、边界与整体架构)
java·spring boot·spring cloud·微服务·架构
Thomas.Sir1 天前
第12课:Nacos 配置加密、版本回溯、配置监听 & 生产风控方案
spring cloud·nacos
贾斯汀frank2 天前
Spring Boot + K8s + Istio 与 Spring Cloud:微服务治理能力对比
spring cloud·微服务·istio
Thomas.Sir2 天前
第11课:Nacos 多环境、多服务配置隔离 & 配置优先级详解
spring cloud·微服务·nacos
Thomas.Sir4 天前
第8课:Nacos健康检测、权重配置、环境隔离实战
spring cloud·微服务
SL_staff5 天前
JVS-Rules vs Drools:金融风控团队为何转向业务可编辑的决策平台
java·spring cloud·github