Nodeflow4j業(yè)務(wù)流程配置化利器

Nodeflow4j簡介

Nodeflow4j是本人最近發(fā)布的一個JAVA開源項目,并實(shí)際運(yùn)用于生產(chǎn)項目中。一直想寫一篇中文的介紹七婴,恰好公司美女約稿祟偷,治愈本次的懶癌。

Nodeflow4j是一個輕量基于JSON定義且面象組件開發(fā)的JAVA流程引擎打厘。

主要特性

  • JSON定義

和其他的流程引擎基于XML不同修肠,其基于JSON定義在流程配置和定義方面更加簡潔和友好,且流程解析方面性能更佳户盯。

  • 面向組件

基于組件化開發(fā)的可以靈活嵌施,可伸縮的配置業(yè)務(wù)流程。包括內(nèi)置的組件莽鸭,還可以自定義自身的組件并在多個業(yè)務(wù)流程中使用吗伤。
如果組件足夠豐富,可以做到零編程或少編程硫眨,就能定義一個新的業(yè)務(wù)處理流程足淆。

  • Groovy表達(dá)式

除了語法簡法和親切,Groovy在處理表達(dá)式方面更加強(qiáng)大和高效礁阁。

JSON定義說明

下面是一個JSON定義的樣本巧号,演示表達(dá)式的定義和流程的跳轉(zhuǎn)

{
 "indexs":[{"idx":"foo","type":"INT"},
{"idx":"bar","mode":2,"type":"INT"}],
 "nodes":[
   {"id":"n1","component":"ruleset","ruleset":
      ["bar=foo*1000","bar+=24"],"next":"n2"},
   {"id":"n2","next":[{"condition":"bar==1024","next":"n3"},
   {"condition":"bar==2024","next":"n4"},{"next":"n5"}]},
   {"id":"n3","component":"testCustomComponent"},
   {"id":"n4"},
   {"id":"n5"}
 ]
}
  • indexs - 輸入輸出參數(shù)

    ind - 參數(shù)名稱

    type - 參數(shù)類型,取值INT,LONG,DOUBLE 或 NUMERIC姥闭,大小寫不敏感

    mode - 參數(shù)模式丹鸿,取值1, 2或3分別代表輸入,輸出或即是輸入也是輸出(流程執(zhí)行完的輸出結(jié)果)

  • nodes - 流程結(jié)點(diǎn)

    id - 流程上結(jié)點(diǎn)的唯一性ID

    component - 組件ID

    next - 當(dāng)前結(jié)點(diǎn)的下一個結(jié)點(diǎn). 取值可以是結(jié)點(diǎn)的ID字符串(無條件進(jìn)行下一個結(jié)點(diǎn))或是對象(需進(jìn)行條件判斷)泣栈,當(dāng)取值為對象時, 必須有condition屬性卜高。當(dāng)為對象數(shù)組時,即按數(shù)據(jù)順序進(jìn)行歷遍南片,符合條件時后面的條件不再判斷

內(nèi)置組件

當(dāng)前提供下列內(nèi)置組件掺涛,更多的內(nèi)置組件將會陸續(xù)提供。當(dāng)然你也可以自定義自己的組件

ruleset - 執(zhí)行一組groovy表代式

delay - 執(zhí)行下一個結(jié)點(diǎn)時進(jìn)行延時疼进,默認(rèn)為2秒鐘

開始使用

  1. 怎么執(zhí)行流程文件

下面是com.github.zzzhan.nodeflow4j.NodeflowTest的代碼片斷, 位于src/test/java薪缆,可直接運(yùn)行并查看結(jié)果。

    nfJson = IOUtils.toString(NodeflowTest.class.getResourceAsStream(
"/NodeflowTest.nf"));
    Map<String, Object> params = new HashMap<String,Object>();
    params.put("foo", 1);
    Nodeflow nf = new Nodeflow(nfJson);
    nf.execute(params);
    assertEquals("n3", nf.getCurNode());
    Map<String, Object> output = nf.getOutput();
    assertEquals(2048, output.get("bar"));

    params.put("foo", 2);
    nf = new Nodeflow(nfJson);
    nf.execute(params);
    assertEquals("n4", nf.getCurNode());
    output = nf.getOutput();
    assertEquals(2024, output.get("bar"));

    params.put("foo", 3);
    nf = new Nodeflow(nfJson);
    nf.execute(params);
    assertEquals("n5", nf.getCurNode());
  1. 在Spring中使用

請打開模塊nodeflow4j-spring, 并查看里面的使用方式

  1. Maven
<dependency>
    <groupId>com.github.zzzhan</groupId>
    <artifactId>nodeflow4j</artifactId>
    <version>0.0.1-SNAPSHOT</version>
</dependency>

應(yīng)用場景

之前涉及到一些風(fēng)控建模采用了drools(基于JAVA的規(guī)則引擎),暫不說其運(yùn)行效率伞广,其定義配置跟寫程序無異拣帽,對業(yè)務(wù)人員很不友好,維護(hù)很不方便嚼锄,所以才有了Nodeflow4j减拭。
Nodeflow4j可以滿足業(yè)務(wù)流程變動的需求,對流程定義維護(hù)可以快速響應(yīng)区丑。典型的拧粪,可以應(yīng)用于連接多方數(shù)據(jù)修陡,進(jìn)行模型構(gòu)建,如用戶評分可霎、額度測算或交叉驗(yàn)證等等業(yè)務(wù)魄鸦。
當(dāng)然對流程狀態(tài)進(jìn)行持久化,也可以作為工作流引擎的底層實(shí)現(xiàn)癣朗。因此拾因,基于組件化的流程定義在實(shí)際的業(yè)務(wù)流程處理中可以發(fā)揮很大作用。

最后

幫加個星旷余,加星又不會懷孕:https://github.com/zzzhan/nodeflow4j

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末绢记,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子荣暮,更是在濱河造成了極大的恐慌奋姿,老刑警劉巖咆霜,帶你破解...
    沈念sama閱讀 219,589評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件唾那,死亡現(xiàn)場離奇詭異搅荞,居然都是意外死亡照激,警方通過查閱死者的電腦和手機(jī)序厉,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,615評論 3 396
  • 文/潘曉璐 我一進(jìn)店門矫户,熙熙樓的掌柜王于貴愁眉苦臉地迎上來离斩,“玉大人节吮,你說我怎么就攤上這事抽高。” “怎么了透绩?”我有些...
    開封第一講書人閱讀 165,933評論 0 356
  • 文/不壞的土叔 我叫張陵翘骂,是天一觀的道長。 經(jīng)常有香客問我帚豪,道長碳竟,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,976評論 1 295
  • 正文 為了忘掉前任狸臣,我火速辦了婚禮莹桅,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘烛亦。我一直安慰自己诈泼,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,999評論 6 393
  • 文/花漫 我一把揭開白布煤禽。 她就那樣靜靜地躺著铐达,像睡著了一般。 火紅的嫁衣襯著肌膚如雪檬果。 梳的紋絲不亂的頭發(fā)上瓮孙,一...
    開封第一講書人閱讀 51,775評論 1 307
  • 那天贾节,我揣著相機(jī)與錄音,去河邊找鬼衷畦。 笑死栗涂,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的祈争。 我是一名探鬼主播斤程,決...
    沈念sama閱讀 40,474評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼菩混!你這毒婦竟也來了忿墅?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,359評論 0 276
  • 序言:老撾萬榮一對情侶失蹤沮峡,失蹤者是張志新(化名)和其女友劉穎疚脐,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體邢疙,經(jīng)...
    沈念sama閱讀 45,854評論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡棍弄,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,007評論 3 338
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了疟游。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片呼畸。...
    茶點(diǎn)故事閱讀 40,146評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖颁虐,靈堂內(nèi)的尸體忽然破棺而出蛮原,到底是詐尸還是另有隱情,我是刑警寧澤另绩,帶...
    沈念sama閱讀 35,826評論 5 346
  • 正文 年R本政府宣布儒陨,位于F島的核電站,受9級特大地震影響笋籽,放射性物質(zhì)發(fā)生泄漏蹦漠。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,484評論 3 331
  • 文/蒙蒙 一干签、第九天 我趴在偏房一處隱蔽的房頂上張望津辩。 院中可真熱鬧,春花似錦容劳、人聲如沸喘沿。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,029評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽蚜印。三九已至,卻和暖如春留量,著一層夾襖步出監(jiān)牢的瞬間窄赋,已是汗流浹背哟冬。 一陣腳步聲響...
    開封第一講書人閱讀 33,153評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留忆绰,地道東北人浩峡。 一個月前我還...
    沈念sama閱讀 48,420評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像错敢,于是被迫代替她去往敵國和親翰灾。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,107評論 2 356

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理稚茅,服務(wù)發(fā)現(xiàn)纸淮,斷路器,智...
    卡卡羅2017閱讀 134,672評論 18 139
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,190評論 25 707
  • 一侈沪、引號 Python 可以使用引號( ' )、雙引號( " )魄衅、三引號( ''' 或 """ ) 來表示字符串峭竣。...
    海天一樹X閱讀 772評論 3 5
  • 能讓我們開心的事越來越少了 以前只要有玩具有糖果就開心 以前只要有見面有聊天就開心 現(xiàn)在好像做什麼都沒辦法開心 是...
    勤語閱讀 150評論 0 0
  • 又是一年的時光過去了,900個格子又少了一個晃虫。沒有什么能阻擋時光的流逝生命的衰老,也許堅定柔軟的心扣墩,可以讓人在面對...
    echo_lei閱讀 167評論 0 1