前段時間因業務需要完成了一個工作流組件的編碼工作。藉著這個機會跟大家分享一下整個創作過程,希望大家喜歡,組件暫且命名為"easyFlowable"。 接下來的文章我將從什麼是工作流、為什麼要自研這個工作流組件、架構設計三個維度跟大家來做個整體介紹。 ...
大家好,我是陶朱公Boy(一個認真生活總想超越自己的程式員!)。
前言
什麼是工作流
定義:
簡單點說,我認為工作流就是對業務的流程化抽象。WFMC給出了工作流參考模型如下:
為什麼稱之為“流”,則是各個節點通過內外部驅動觸發引起節點的推進,形成一個流式的狀態達到業務終點。比如一次用戶查看淘寶商品的費用、一次支付成功後的權益開通、一次用戶註冊、一次調度任務的運行等,都是可以是一個工作流。
適用場景:
關於為什麼要造輪子
目前市場上比較有名的開源工作流程引擎有osworkflow、jbpm、activiti、flowable、camunda等,國內有Liteflow。(Jbpm4、Activiti、Flowable、camunda四個框架同宗同源,祖先都是Jbpm4)。
這些工作流組件功能豐富且強大,支持流程可視化、業務流程可編排、狀態持久化和自動重試等。
但我們前期需求實在太簡單了,只需要用到業務可編排能力,其他能力暫時用不上。經過綜合考慮之後決定還是自己簡單的實現一個,也方便將來的可定製化。
架構設計
▲功能說明
▲業務架構
▲類圖
▲時序圖
▲ER圖
整個ER圖細分為:
flow_config
flow_node_config
flow_node_chain_config
flow_node_process
flow_node_process_log
這五張表(XXconfig結尾的表是後臺配置表,需要提前定義)。
flow_node_process:流程運行時表。這張表也很重要它表達的是某一次具體的業務流程單(請求的時候必須傳遞一個唯一的流程單號的入參,代辦某個具體的流程申請)的運行態數據(申請狀態,流程狀態)。
通過這些狀態能知道某流程單號實際的運行情況(運行到具體哪個節點了,下一個待執行的節點是什麼)等。流程的定址是需要根據此表的數據來進行下去。
flow_node_process_log:這張表顧名思義是日誌表,每一個流程單的運行經過各個節點,運行完後(無論成功或失敗)最終都會落一條日誌記錄數據。
▲關於開源:
組件作者還在整理中,先貼下github地址:https://github.com/TaoZhuGongBoy/easyFlowable。(會在近期完全開放,敬請期待)
總結
▲寫到最後
作為996的程式員,寫這篇文章基本都是利用工作日下班時間和周六周日雙休的時間才最終成稿,比較不易。 如果你看了文章之後但凡對你有所幫助或啟發,真誠懇請幫忙關註一下作者,點贊、在看此文。你的肯定與贊美是我未來創作最強大的動力,我也將繼續前行,創作出更加優秀好的作品回饋給大家,在此先謝謝大家了!關註我
如果這篇文章你看了對你有幫助或啟發,麻煩點贊、關註一下作者。你的肯定是作者創作源源不斷的動力。
公眾號:「陶朱公Boy」
裡面不僅彙集了硬核的乾貨技術、還彙集了像左耳朵耗子、張朝陽總結的高效學習方法論、職場升遷竅門、軟技能。希望能輔助你達到你想夢想之地!
公眾號內回覆關鍵字“電子書”下載pdf格式的電子書籍(JAVAEE、Spring、JVM、併發編程、Mysql、Linux、kafka、分散式等)、“開發手冊”獲取阿裡開發手冊2本、"面試"獲取面試PDF資料。