應用流水線模式

Mondo 科技 更新 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小程式,都有自己的一套商業模式。例如,在眾多星級酒店中占有一席之地的亞朵酒店,就採用了一種商業模式。從最低開始,讓您享受到同樣的酒店服務。獲利的手段是 賣掉你能享受的一切...