应用流水线模式

小夏 科技 更新 2024-01-29

本文介绍了管道设计模式在业务流程编排中的应用。

流水线模式是指流水线模式,也称为流水线模式。 传入的数据被设计为通过一系列预定义的阶段进行处理,每个阶段的输出是下一阶段的输入。

在此示例中,通过定义 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) }
本文重点介绍流水线模式的抽象和应用,以上示例仅供个人理解。 在实践中,这种情况比用冗余规则处理各种业务场景要好,也便于规则编排。

需要改进的要点:每个任务实际上都隐含着执行的顺序,可以进一步实现

对于“流水线组装”的最后一步,可以通过配置描述来进一步抽象,这样就可以对每个“流水线任务”的描述进行控制,规则项可以“可插拔”。

作者:京东保险 侯亚东 **转载请注明**。

相似文章

    电商新模式 分享购模式的核心玩法和奖励机制

    随着互联网的不断发展,一种新的电子商务模式 分享购,正在改变着我们的购物方式和社交方式习。本文将深入探讨分享购模式的玩法和独特的奖励机制,以帮助读者更好地了解这种新的电子商务模式。.分享购模式的核心玩法。社交分享 分享购模式的核心是社交网络和分享。用户可以将自己喜欢的产品分享给朋友或社交平台,通过分...

    链2 1模式与消费增值商业模式相结合,创新性强,爆发力无限

    在当今竞争激烈的市场环境中,企业需要不断创新并寻求有效的营销策略来吸引和留住消费者。链式驱动的 模式和增值消费商业模式是两种吸睛的模式,各有各的优势,结合在一起会产生强大的爆发力和吸引力。链上 模式是以 系统为核心,通过设置 等级和推荐 实现用户的快速裂变和增长。这种模式的核心机制在于身份的转化,用...

    社交电商模式常青,链动2 1模式详解

    链驱动 模式是一种基于用户推荐和团队建设的商业模式,其核心机制在于奖励机制的设置。在这个模型中,和老板是非常重要的身份。他们通过激励下属用户的参与和推广来最大化自己的收入和业务发展。身份 作为链式的 模式,用户可以参与更大规模的推广和团队建设,从而获得更多的奖励。身份通常需要满足某些条件,例如团队中...

    宁夏开启冬季旅游模式

    月日,宁夏冬游,享受阳光 年冬季旅游启动仪式在宁夏沙湖旅游风景区举行。本次冬季旅游启动仪式继续突出 游宁夏,给心灵一个假期 的价值定位,更加注重打磨 冬游宁夏,享受阳光 的冬季旅游品牌形象,完美融合宁夏冬景 人文民俗,彰显宁夏 冬日风光 冬日游乐趣 和冬季旅行乐趣 资源,呈现宁夏冬季节气之美和宁夏冬...

    什么是商业模式?

    各行各业都靠商业模式赚钱 商业模式是很多公司存在的基础,赚钱的主要原因取决于你使用什么样的商业模式。公司的根源,实体店,各种APP小程序,都有自己的一套商业模式。例如,在众多星级酒店中占有一席之地的亚朵酒店,就采用了一种商业模式。从最低开始,让您享受到同样的酒店服务。获利的手段是 卖掉你能享受的一切...