精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

寫出個靈活的系統竟然可以如此簡單!小白也能寫出高級的Java業務!

開發 前端
現在業務有變動的話,我只需要改寫其中一個組件就可以了。而且組件是可以拿來復用的。之間的順序也是可以隨意切換的。這一切,只需要改規則文件即可。代碼是完全不用動的。

?最近正好公司里有個需求,一個短信業務接了多個第三方供應商,某些業務需要查詢第三方供應商剩余的短信包數量去選擇剩余量最多的渠道去批量發送。有些業務是指定了某個短信供應商,有些場景需要根據業務的值去動態判斷該用哪個供應商。場景非常復雜,還經常變化。

以前的代碼實在慘不忍睹,選擇剩余量最多的渠道是一個個去查的,然后獲得結果去比較。至于指定的供應商和根據業務的值去判斷選擇供應商則是用大量的if else去嵌套各種判斷。每次看到這坨代碼真的覺得太粗糙了。關鍵是有些供應商還經常變,新接的供應商需要替代舊的供應商,加入這一大坨代碼里。業務的判斷條件還時不時變化一下。

出了幾次問題之后,領導看不下去了,叫我想辦法去優化。

我理了理邏輯,整個關系圖應該是這樣的,其中我把一個個去查的變成了并行去查,為了節約串行去查的IO耗時問題。

圖片

其中有些復雜查庫邏輯,判斷冪等性的步驟我就去掉了。只挑選了關鍵的步驟畫上去。

叫我去重構這個慢慢寫也能寫出,但是關鍵的是,每個步驟和判斷邏輯還時不時變化下。這就要求我的代碼非常靈活。所以在設計時,一直很苦惱該如何去設計。

在小組開交流會的時候,有其他組的小伙伴和我安利了一個開源框架-LiteFlow。

經過研究這款開源框架,發現LiteFlow是一個國產規則引擎,能夠編排任意復雜的流程,還支持熱刷新。這基本上完全契合我的需求啊!

文檔很詳細,很NICE,大概看了半天就全部學完了。發現新版本的LiteFlow的規則是用EL表達式來寫的。語法總共數下來也就10個左右,非常好理解。

比如這種圖:

圖片

在LiteFlow用規則表示就是:

<chain name="chain1">
THEN(
a,
WHEN(b, THEN(c, d)),
e
)
</chain>

其中THEN是代表串行,WHEN代表并行執行,這種語法,一看就很好理解。

再來看這個圖:

圖片

在LiteFlow里規則表示就是:

<chain name="chain1">
THEN(
a,
WHEN(
b,
SWITCH(c).to(d,e)
),
f
)
</chain>

其中SWITCH關鍵字就是排他網關的意思,c這個組件是一個java類,根據執行的結果去選擇到底應該執行d還是e。

所以這樣嵌套多層也應該是毫無問題的。

LiteFlow的文檔里作者給出了很詳細的例子,還有一些復雜例子,比如:

圖片

這種復雜的例子用LiteFlow的表達式可以寫成:

<chain name="chain1">
THEN(
A,
WHEN(
THEN(B, C),
THEN(D, E, F),
THEN(
SWITCH(G).to(
THEN(H, I, WHEN(J, K)).id("t1"),
THEN(L, M).id("t2")
),
N
)
),
Z
)
</chain>

它的表達式還可以進行定義子變量,上述表達式又可以寫成:

<chain name="chain1">
item1 = THEN(B, C);
item2 = THEN(D, E, F);
item3_1 = THEN(H, I, WHEN(J, K)).id("t1");
item3_2 = THEN(L, M).id("t2");
item3 = THEN(SWITCH(G).to(item3_1, item3_2), N);

THEN(
A,
WHEN(item1, item2, item3),
Z
);
</chain>

其實對照圖,仔細看,會覺得這種表達式還是很清晰的。運用到我那個短信系統里是綽綽有余的。

我研究了下,花了10分鐘時間,就寫出了我那個流程的表達式規則:

<?xml version="1.0" encoding="UTF-8"?>
<flow>
<chain name="channelSenderChain">
selectBestChannel = THEN(
WHEN(
channel1Query, channel2Query, channel3Query,
channel4Query, channel5Query, channel6Query
),
channelSelector
).id("branch1");

selectBizChannel = THEN(
biz1,
SWITCH(if_2).to(
channel3,
channel4,
SWITCH(if_3).to(channel5, channel6).id("s3")
).id("s2")
).id("branch2");

THEN(
packageData,
SWITCH(if_1).to(
channel1,
channel2,
selectBestChannel,
selectBizChannel
),
batchSender
);
</chain>
</flow>

我用了文檔中提到的子變量的方式去寫,這種寫法更加清晰。其實我總結了一個小竅門就是:再復雜的圖,都可以拆分成一個個局部的整體,先定局部的小變量,然后在主要的流程里去引入這些局部變量就可以了。反正我寫這個圖的流程就差不多10分鐘。

至于一個個小組件。我就跟著文檔里做了一遍,把原來的大邏輯改拆成一個個的小邏輯。封裝在不同的組件里,給上相應的Id就可以了。

最后通過LiteflowExecutor觸發下就可以了。

LiteflowResponse response = flowExecutor.execute2Resp("channelSenderChain", null, BatchMessageResultContext.class);
BatchMessageResultContext context = response.getFirstContextBean();
if (response.isSuccess()){
log.info("執行成功,最終選擇的渠道是{}", context.getFinalResultChannel());
}else{
log.error("執行失敗", response.getCause());
}

非常簡單有木有!!!

而且特別優雅!!!

我改成上面這種形式了之后,每一個小邏輯塊之間就完全解耦了。當中數據的連接完全是靠上下文進行連接的,在研究了LiteFlow的理念之后,我發現這理念特別好。直接把原先的耦合性特別強的代碼給拆分開來了。

現在業務有變動的話,我只需要改寫其中一個組件就可以了。而且組件是可以拿來復用的。之間的順序也是可以隨意切換的。這一切,只需要改規則文件即可。代碼是完全不用動的。

我仔細翻看了文檔,這框架還支持完全無縫的熱刷新,雖然我的代碼沒用到這特,但是看起來真的是太厲害了,改變規則的編排連重啟應用都不需要!!!不過我打死都不會用這個特性的,領導叫我改業務,我還想多報點工時,這個如果上線了,我就沒法多報工時了。。。??

LiteFlow還有很多高級特性,比如隱式流程啊,事件回調啊,聲明式組件,組件切面啊,步驟信息,線程池的自定義,私有投遞,還有簡單監控。這款國產規則引擎快要玩出花了,強大!

重點要說下LiteFlow的腳本組件這個功能 ,這個功能是我寫好代碼才發現的。我發現,如果用腳本組件的話會更靈活。

雖然LiteFlow支持熱刷新,但也僅限于規則文件改變。你Java代碼改變,還得重啟。

但是LiteFlow的腳本組件連這層都給你捅破了,你可以定義腳本,還支持groovy腳本,這下,連改變邏輯都不用重啟應用了。。

圖片

介于我上面的私心,我同樣也不會把這功能告訴領導。

我重構完這個項目之后,發現LiteFlow這個框架的可玩點非常多。

雖然官方是宣稱是規則引擎,適用于用來解耦系統,組件編排。但是我發現用它來做一些簡單的異步線程編排也是非常nice的。我自己本身對多線程不太精通,用這個來寫,太方便了。

LiteFlow除了規則文件之外,還支持代碼形式的鏈式組裝規則,這個特性正好用來寫多線程。

比如,我要寫一個這樣的多線程例子:

圖片

要讓我用CompletableFuture來寫,我還真不太會。但是你用LiteFlow就很容易,在LiteFlow你無需定義線程,框架自己會為你創建線程,你只需要把你線程里的代碼變成一個個組件,然后用代碼定義規則就可以了。

寫法如下:

String el = "THEN(" +
" main1," +
" WHEN(" +
" THEN(c1, c2, WHEN(c3, c4))," +
" THEN(c5, c6)" +
" )," +
" main2" +
" )";
LiteFlowChainELBuilder.createChain().setChainName("testChain").setEL(el).build();
LiteflowResponse response = flowExecutor.execute2Resp("channelSenderChain", 流程初始參數, 你的上下文.class);

就這樣即完成了這個看上去有點復雜的線程編排了。這款框架簡直是對不會寫多線程小白的福音啊。愛了愛了。

順便還要說下的是,官網的文章超詳細。社區群也很活躍。

以下是LiteFlow的Gitee的倉庫地址,大家可以關注下這款國產規則引擎

https://gitee.com/dromara/liteFlow

為了方便理解,我特地把我那個短信的例子進行了mock后推到了github倉庫,大家可以自行pull下來玩耍。

https://github.com/bryan31/message-demo

責任編輯:武曉燕 來源: 元人部落
相關推薦

2010-08-16 10:10:22

SQL腳本

2020-08-04 09:11:47

架構師垃圾代碼

2022-02-21 08:00:23

開發代碼程序員

2011-04-19 17:09:52

代碼編程

2020-12-28 07:47:35

動態代理AOP

2021-12-09 09:02:53

JavaPDF文件iText

2021-12-08 10:36:46

JavaPDF文件

2017-08-09 15:27:33

python爬蟲開發工具

2024-12-03 08:43:49

2018-04-09 11:10:04

PHP前端控制器自動加載

2020-11-12 09:45:16

前端開發代碼

2019-11-04 13:09:43

數據平臺架構

2021-04-15 09:18:22

單例餓漢式枚舉

2020-11-25 15:41:34

谷歌AI工具

2012-05-30 15:58:39

Java編程代碼

2012-09-03 14:34:39

Java編程代碼

2020-07-15 08:17:16

代碼

2023-05-16 07:32:33

業務指數級故障

2023-11-02 09:02:55

Java模式

2009-06-15 16:45:29

動態語言Java
點贊
收藏

51CTO技術棧公眾號

欧美久久久精品| 欧美三日本三级三级在线播放| 国产精品乱码一区二区三区| 永久免费看片在线播放| 国产精品一区二区av交换| 欧美亚洲高清一区| 欧美老少做受xxxx高潮| 高清中文字幕mv的电影| 自拍偷拍欧美视频| 中文字幕一区av| 国产一区二区三区无遮挡 | 123成人网| 亚洲免费观看高清完整版在线观看熊 | 综合欧美国产视频二区| 女同性αv亚洲女同志| 日本免费久久| 一区二区三区美女视频| 日韩在线导航| 草久视频在线观看| 欧美第十八页| 欧美日韩三级一区二区| 日本黄色片一级片| a中文在线播放| 白白色 亚洲乱淫| 国产在线播放不卡| 欧美激情黑白配| 国产精品激情电影| 中文字幕免费精品一区高清| 亚洲精品乱码久久| 国产精品2区| 欧美在线啊v一区| 精品久久久久久无码中文野结衣| 日本在线观看网站| 久久久久国产精品人| 欧美在线视频免费观看| 91porn在线视频| 日韩视频1区| 亚洲九九爱视频| 午夜精品美女久久久久av福利| 免费看国产片在线观看| 极品销魂美女一区二区三区| 国产成人精品网站| 日韩欧美视频在线免费观看| 最新国产精品久久久| 一本一道久久a久久精品逆3p | 欧美成人福利视频| 国内自拍第二页| av在线app| 亚洲国产精品99久久久久久久久| 久久久久久久久四区三区| 亚洲xxxx天美| 国产精品91xxx| 91欧美精品午夜性色福利在线| 亚洲中文无码av在线| 久久国产直播| 色综合伊人色综合网| 久久久久久久久久久久久久久| 欧洲亚洲视频| 亚洲激情免费观看| 无码成人精品区在线观看| 亚洲综合网狠久久| 亚洲精品一区二区三区四区高清| 成年网站在线免费观看| 免费在线小视频| 欧美日韩精品在线视频| 丰满爆乳一区二区三区| 婷婷电影在线观看| 欧美色另类天堂2015| 欧美日韩在线视频一区二区三区| 中文在线а√天堂| 日韩欧美国产成人| mm1313亚洲国产精品无码试看| 日韩成人动漫| 欧美日韩激情在线| 成人高清在线观看视频| 大奶在线精品| 亚洲精品久久久久久久久| 亚洲成人日韩在线| 日韩久久精品| 免费97视频在线精品国自产拍| 日韩欧美中文字幕视频| 亚洲精品在线二区| 久久亚洲影音av资源网| a级片在线观看免费| 亚洲一级电影| 人人爽久久涩噜噜噜网站| 中文字幕+乱码+中文字幕明步| 韩国女主播成人在线| 成人欧美视频在线| 国产精品欧美久久久久天天影视| 国产一区视频网站| 国产偷久久久精品专区| 国产视频精品久久| 亚洲免费伊人电影| 男人操女人逼免费视频| 成人黄色图片网站| 日韩精品一区二区三区中文不卡 | 午夜精品美女自拍福到在线| 国产aaaaaaaaa| 真实国产乱子伦精品一区二区三区| 欧美日韩成人网| 免费的毛片视频| 国产制服丝袜一区| 麻豆精品蜜桃一区二区三区| 免费在线观看av网站| 黄色成人在线播放| 亚洲精品视频三区| 亚欧洲精品视频在线观看| www.美女亚洲精品| 69国产精品视频免费观看| 韩日精品视频一区| 欧美日韩亚洲一区二区三区在线观看| 秋霞午夜在线观看| 色综合激情久久| 欧美人与性动交α欧美精品| 亚洲国产综合在线观看| 精品91自产拍在线观看一区| 久久精品一区二区三区四区五区 | 欧美综合一区第一页| 国产又黄又粗又长| 久久久久九九视频| 国产人妻777人伦精品hd| 在线免费观看亚洲| 国产一区二区三区日韩欧美| 日韩欧美激情视频| 岛国精品在线观看| 中文字幕中文字幕一区三区| 亚洲精品动漫| 亚洲精品狠狠操| 久久久www成人免费毛片| 久久爱www久久做| 日韩精品一区二区三区丰满| 欧美激情20| 精品久久久久香蕉网| 中文字幕另类日韩欧美亚洲嫩草| 免费观看在线综合| 欧美午夜欧美| 在线成人av观看| 日韩国产高清污视频在线观看| 国产在线视频二区| 国产成人综合网| 欧洲美女和动交zoz0z| 欧洲午夜精品| 色悠悠国产精品| 中文字幕你懂的| 国产日产欧美一区二区三区| 日本精品久久久久中文字幕| 丝袜连裤袜欧美激情日韩| 欧美激情小视频| 丰满人妻一区二区三区四区53 | 91免费欧美精品| 免费网站成人| 337p亚洲精品色噜噜噜| 免费成人深夜夜行网站| 国产一区在线看| 国产女教师bbwbbwbbw| 亚洲91网站| 欧美精品激情blacked18| 欧美一区二区三区激情| 性久久久久久久久久久久| 国产人成视频在线观看| av不卡在线看| 日韩国产精品一区二区三区| 国产91亚洲精品久久久| 日韩中文字幕网站| 国产熟女一区二区丰满| 玉足女爽爽91| 完美搭档在线观看| 久久综合九色综合欧美狠狠| 视频一区视频二区视频| 91精品福利观看| 欧美福利小视频| 亚洲欧洲成人在线| 91精品91久久久中77777| 成人性生交大片免费看无遮挡aⅴ| 91精品91| 国产精品9999久久久久仙踪林| av资源新版天堂在线| 亚洲福利视频二区| 欧美精品韩国精品| 中文字幕五月欧美| 99riav国产精品视频| 中国女人久久久| 亚洲欧洲一区二区在线观看| 狂野欧美xxxx韩国少妇| 69视频在线免费观看| 精品免费久久久| 精品福利一区二区| 一本在线免费视频| 成人av午夜影院| 蜜臀av免费观看| 黄色日韩在线| 色综合电影网| jizzjizzjizz欧美| 国产美女久久精品| 岛国毛片av在线| 这里只有精品在线观看| 性色av蜜臀av| 欧美在线观看一区二区| 精品少妇一二三区| 欧美激情一区在线观看| 精品人妻无码中文字幕18禁| 爽好久久久欧美精品| 人妻激情另类乱人伦人妻| 国产尤物久久久| 国产精品久久久久久久久久直播| 国产一区高清| 欧美一级片一区| 欧洲精品二区| 中文字幕自拍vr一区二区三区| 黄色片网站免费在线观看| 欧美日韩一区二区不卡| 中文字幕免费在线观看视频| 亚洲精品一卡二卡| 在线视频第一页| 99精品视频在线播放观看| 99精品视频国产| 日本不卡一区二区三区高清视频| 免费网站在线观看视频| 欧美中文一区二区| 麻豆精品传媒视频| 米奇精品关键词| www日韩av| 色婷婷成人网| 国产精品嫩草视频| 芒果视频成人app| 久久久久久高潮国产精品视| 日韩在线免费电影| 国产一区二区三区丝袜| 亚洲色欧美另类| 亚洲国产精品小视频| 精品人妻伦一区二区三区久久| 欧美日韩国产首页在线观看| 91porny九色| 色综合久久综合网欧美综合网| 国产精品suv一区二区| 亚洲美女视频在线观看| 国产精品久久久免费看| 国产精品视频一二| 国产精品久久久久无码av色戒| 99久久亚洲一区二区三区青草| 久久精品aⅴ无码中文字字幕重口| 国产麻豆精品在线观看| 91网址在线观看精品| 久久69国产一区二区蜜臀| 国产精品视频分类| 久久爱www久久做| 亚洲天堂伊人网| 国产在线不卡一卡二卡三卡四卡| caoporm在线视频| 狠狠狠色丁香婷婷综合激情| 在线观看国产一级片| 久久 天天综合| 九九热精品国产| 国产精品一二三在| 亚洲最大视频网| 99久久精品99国产精品| 中文在线一区二区三区| 美女在线一区二区| 乌克兰美女av| 精品中文字幕一区二区| 波多野结衣网页| 粉嫩蜜臀av国产精品网站| 国产aaaaa毛片| 久久精品国产久精国产爱| 91pony九色| 国产91丝袜在线播放| 成人在线电影网站| 久久久三级国产网站| 亚洲一级片在线播放| 中文字幕一区日韩精品欧美| 人妻少妇精品一区二区三区| 亚洲一区二区三区在线看| 久久午夜免费视频| 欧美在线观看你懂的| 国产精品综合在线| 亚洲精品在线一区二区| 欧美精品少妇| 精品国产一区二区三区久久狼5月 精品国产一区二区三区久久久狼 精品国产一区二区三区久久久 | 精品中文字幕视频| 日本在线视频免费| 国产人成亚洲第一网站在线播放| 国产伦理片在线观看| 国产精品福利一区| 国产一级特黄aaa大片| 色久优优欧美色久优优| 国产又粗又猛又爽又黄的| 久久综合国产精品| 久久精品ww人人做人人爽| 免费精品一区二区三区在线观看| 国产伦精品一区二区| 成人高清av| wwwjizzjizzcom| 久久久国产亚洲精品| 一级黄色片在线免费观看| 99精品久久免费看蜜臀剧情介绍| 一级特黄曰皮片视频| 亚洲综合久久久久| 成人黄色三级视频| 精品久久久久香蕉网| 91看片在线观看| 91精品成人久久| 精品一区二区三区四区五区 | av在线不卡顿| 成人免费91在线看| 欧美日本成人| 欧美黄网在线观看| 秋霞午夜鲁丝一区二区老狼| 四虎永久免费观看| 亚洲欧洲精品一区二区三区| 国产成人愉拍精品久久| 91精品国产色综合久久不卡电影| 亚洲一级在线播放| 欧美日韩精品欧美日韩精品一 | 怡红院av久久久久久久| 欧美大片在线观看一区二区| 91涩漫在线观看| 亲子乱一区二区三区电影| 亚洲一区二区电影| 夜夜爽www精品| 日韩在线卡一卡二| 水蜜桃av无码| 亚洲动漫第一页| av官网在线观看| 欧美不卡一区二区三区| www.中文字幕久久久| 97视频人免费观看| 中文字幕亚洲在线观看 | av电影在线观看| 欧美做爰性生交视频| 国内视频在线精品| 精品久久久无码人妻字幂| 精品在线观看免费| 国产麻豆a毛片| 欧美性色欧美a在线播放| 手机看片福利在线观看| 98精品国产高清在线xxxx天堂| 日韩精品一区二区三区中文在线| 影音先锋欧美在线| 免播放器亚洲一区| 欧美人与性囗牲恔配| 色丁香久综合在线久综合在线观看| 天天av综合网| 午夜精品久久久久久久白皮肤| 超碰成人免费| cao在线观看| 久久国产精品毛片| 亚洲一区二区三区无码久久| 天天色综合成人网| 天天舔天天干天天操| 中文字幕av日韩| 欧美日韩五码| 粉嫩av一区二区三区免费野| 先锋影音一区二区三区| 另类av一区二区| 无码人妻精品一区二区三应用大全| 天天色天天操综合| 日本天堂在线| 国产成人一区二区三区| 青青草综合网| 国产欧美一区二| 一区二区成人在线观看| 亚洲第一天堂网| 午夜精品一区二区三区av| 乱中年女人伦av一区二区| 91av资源网| 国产欧美综合色| 97人妻精品一区二区三区视频 | 超清av在线| 国产综合色一区二区三区| 免费日韩av片| 无码人中文字幕| 欧美一区二区三区婷婷月色 | 亚洲国产综合色| 四虎精品成人免费网站| 国产精品高潮呻吟久久av黑人| 色婷婷综合网| 久久久久中文字幕亚洲精品| 黑人精品xxx一区一二区| 国际av在线| 91在线免费观看网站| 日韩视频在线一区二区三区 | 91网在线播放| 成人在线观看av| 久久国产一二区| 国产成人av免费在线观看| 精品福利一区二区三区| 国产伦精品一区二区三区视频金莲| 日韩精品无码一区二区三区| 国产在线国偷精品免费看| 可以免费看的av毛片| 这里只有精品丝袜| 超碰精品在线| 中国黄色片免费看| 亚洲国产日日夜夜| 中文字幕在线免费| 国产在线精品一区二区中文| 美女视频一区二区三区| 中文字幕一区二区三区精品| 日韩中文字幕网|