本文介绍了管道设计模式在业务流程编排中的应用。
流水线模式是指流水线模式,也称为流水线模式。 传入的数据被设计为通过一系列预定义的阶段进行处理,每个阶段的输出是下一阶段的输入。
在此示例中,通过定义 pipelineproduct、pipelinejob 和 pipelinenode,完成整条流水线的组装,并将“原材料”加工成“商品”。 其中,流水线产品负责承载各阶段的产品信息;流水线任务负责产品在不同阶段的处理;流水线节点约束流水线产品与任务的关系,通过信号量定义任务的执行模式。
工具依赖关系如下。
cn.hutool hutool-all 最新版本
package com.example.demo.pipeline.model;** 流水线产品接口 * 参数信号量 * 作者 * 日期 2023 05 15 11:49 * 公共接口 PipelineProduct {}
package com.example.demo.pipeline.model;** 流水线任务接口 * param 流水线产品 * 作者 * 日期 2023 05 15 11:52 * @functionalinterfacepublic 接口 流水线作业 * p 执行(p product);}
package com.jd.baoxian.mall.market.service.pipeline.model;import j**a.util.function.predicate;** 流水线节点定义 * 参数信号量 * 参数流水线产品 * 作者 * 日期 2023 05 15 11:54 * 公共接口 pipelinenode>package comexample.demo.api;import com.example.demo.model.request.demoreq;import com.example.demo.model.response.demoresp;import com.example.demo.pipeline.factory.pipelineformanagersubmit;import org.springframework.stereotype.service;import j**ax.annotation.resource;** demo-api * 作者 * 日期 2023 08 06 16:27 * @servicepublic 类 demoManagerAPI * public demoresp managersubmit(demoreq requestdata) }package comexample.demo.model.request;** Demo 输入参数 * 作者 * 日期 2023 08 06 16:33 * public class demoreq {}package com.example.demo.model.response;import lombok.data;** 演示参数 * 作者 * 日期 2023 08 06 16:33 * @datapublic 类 demoresp * public static demoresp buildres(string message) }假设审核提交的过程需要包括:参数验证、锁定、解锁和事务提交。
package com.example.demo.pipeline.factory.job;import cn.hutool.json.jsonutil;import com.example.demo.model.request.demoreq;import com.example.demo.pipeline.factory.demopipelineproduct;import lombok.extern.slf4j.slf4j;import org.springframework.stereotype.service;** 锁实现层 * 作者 * 日期 2023 05 17 17:00 * @service@slf4jpublic 类 checkrequestlockjob extends abstractdemojob ] lock,线程号:{}", jsonutil.tojsonstr(userrequestdata), tradeid); return demopipelineproduct.demosignalenum.normal; }package com.example.demo.pipeline.factory.job;import cn.hutool.json.jsonutil;import com.example.demo.model.request.demoreq;import com.example.demo.pipeline.factory.demopipelineproduct;import lombok.extern.slf4j.slf4j;import org.springframework.stereotype.service;** Unlock-Implementation-Layer * 作者 * 日期 2023 05 17 17:00 * @service@slf4jpublic 类 checkRequestUnlockJob extends abstractdemojob ] unlocked,线程号:{}", jsonutil.tojsonstr(userrequestdata), tradeid); return demopipelineproduct.demosignalenum.normal; }package com.example.demo.pipeline.factory.job;import cn.hutool.json.jsonutil;import com.example.demo.model.request.demoreq;import com.example.demo.pipeline.factory.demopipelineproduct;import lombok.extern.slf4j.slf4j;import org.springframework.stereotype.component;** Audit-Parameter Validation-Implementation 类 * 作者 * 日期 2023 05 15 19:50 * @slf4j@componentpublic 类 managerCheckParamJob extends abstractdemojob ]输入参数校验,线程号:{}", jsonutil.tojsonstr(userrequestdata), tradeid);非空验证 有效验证 验证通过,返回 demopipelineproductdemosignalenum.normal; }package com.example.demo.pipeline.factory.job;import cn.hutool.json.jsonutil;import com.example.demo.model.request.demoreq;import com.example.demo.model.response.demoresp;import com.example.demo.pipeline.factory.demopipelineproduct;import lombok.extern.slf4j.slf4j;import org.springframework.stereotype.service;** 审核 - 信息提交 - 业务实施 * 作者 * 日期 2023 05 12 14:36 * @service@slf4jpublic 类 ManagerSubmitJob 扩展 AbstractDemojob ]信息提交,线程号:{}", jsonutil.tojsonstr(userrequestdata), tradeid); productdata.setuserresponsedata(demoresp.buildres("成功"));catch (exception ex) ", jsonutil.tojsonstr(userrequestdata), ex); throw ex; }return demopipelineproduct.demosignalenum.normal; }对于输入和返回参数的转换,构造了流水线任务执行序列和执行信号量。
package com.example.demo.pipeline.factory;import com.example.demo.model.request.demoreq;import com.example.demo.model.response.demoresp;import com.example.demo.pipeline.factory.job.checkrequestlockjob;import com.example.demo.pipeline.factory.job.checkrequestunlockjob;import com.example.demo.pipeline.factory.job.managercheckparamjob;import com.example.demo.pipeline.factory.job.managersubmitjob;import lombok.requiredargsconstructor;import lombok.extern.slf4j.slf4j;import org.springframework.stereotype.service;import j**ax.annotation.postconstruct;import j**a.util.objects;import j**a.util.uuid;** 流水线工厂入口 - 审核流水线 * 作者 * 日期 2023 05 15 19:52 * @slf4j@service@requiredargsconstructorpublic 类 PipelineForManagerSubmit ** 组装工艺链 * private void AssemblyManagerSubmit() ** 审核 - 提交处理 * param requestdata 输入参数 * return * public demoresp managersubmitcheck(demoreq requestdata) return finalproductgetproductdata().getuserresponsedata();** 复习 - 初始化请求的流水线数据 * param requestdata 输入参数 * 返回初始流水线数据 * private demopipeline产品经理 submitCheckInitial(Demoreq requestdata) }本文重点介绍流水线模式的抽象和应用,以上示例仅供个人理解。 在实践中,这种情况比用冗余规则处理各种业务场景要好,也便于规则编排。
需要改进的要点:每个任务实际上都隐含着执行的顺序,可以进一步实现
对于“流水线组装”的最后一步,可以通过配置描述来进一步抽象,这样就可以对每个“流水线任务”的描述进行控制,规则项可以“可插拔”。
作者:京东保险 侯亚东 **转载请注明**。