OpenApi开放的场景下,需要提供一些服务编排的能力。服务编排是服务端接口的聚合。下面我们基于利用Spring的生命周期,采用责任链模式抽象执行器,自定义内置服务安全机制实现一套流程编排框架。
为什么需要编排的能力?
场景举例:
下单流程如下 点击确认下单->风控->校验库存->优惠券->扣款->发货
流水线代码
confirmOrder(){
riskControl();
verifyInventory();
coupons();
deduction();
shipment();
}
服务编排可以完美的规避以下的风险点:
风控服务出错要求保业务需要先去掉风控流程,需要改动代码上线。 某一个小步骤业务变更如优惠券逻辑变更,会导致代码改动大 测试流程多。
流程编排的好处:
- 实现业务流程的可视化和可维护性,减少管理复杂性。 服务编排工具通常提供图形化界面或声明式配置语言,用于定义服务之间的交互流程。这种方式使得业务流程更加直观,便于团队成员理解和协作。
- 提高可靠性
通过内置的重试机制、超时控制、熔断器等功能,能够自动处理这些异常情况,从而提高系统的可靠性。 - 支持动态扩展 当业务需求发生变化时,只需修改编排配置,而无需修改底层服务代码,从而提高了系统的可维护性。
市面上有很多开源的产品如LiteFlow等,知其所以然我们利用Springboot自己动手从0到1实现一个加深印象,理解流程。
思考流程,如何实现:
1.如何标识服务?自定义注解
2.如何实例化服务?利用Spring通过Bean工厂获取服务
3.执行流程?基于责任链模式
4.如何聚合服务接口?1.打标签 相同标签的是一组 2.上游传服务列表 3.配置文件配置
5.内置扩展机制?责任链执行时通过参数传递控制执行流程,例如同步/异步 报错重试等
代码实现: 自定义注解(服务标识)
策略接口定义
执行上下文
服务实例化注册器
责任链执行器
模板执行方法
优化内置执行策略
服务接口
测试
服务出错示例
服务超时示例成功示例
获取方式 扫码,关注后,
发送:001