日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

《開源精選》是我們分享Github、Gitee等開源社區中優質項目的欄目,包括技術、學習、實用與各種有趣的內容。本期推薦的是一個輕量級的規則引擎框架——LiteFlow。

 

在每個公司的系統中,總有一些擁有復雜業務邏輯的系統,這些系統承載著核心業務邏輯,幾乎每個需求都和這些核心業務有關,這些核心業務業務邏輯冗長,涉及內部邏輯運算,緩存操作,持久化操作,外部資源調取,內部其他系統RPC調用等等。時間一長,項目幾經易手,維護的成本就會越來越高。各種硬代碼判斷,分支條件越來越多。代碼的抽象,復用率也越來越低,各個模塊之間的耦合度很高。一小段邏輯的變動,會影響到其他模塊,需要進行完整回歸測試來驗證。如要靈活改變業務流程的順序,則要進行代碼大改動進行抽象,重新寫方法。實時熱變更業務流程,幾乎很難實現。

如何打破僵局?LiteFlow為解耦邏輯而生,為編排而生,在使用LiteFlow之后,你會發現打造一個低耦合,靈活的系統會變得易如反掌!

 

功能特性

  • 組件定義統一: 所有的邏輯都是組件,為所有的邏輯提供統一化的組件實現方式,小身材,大能量。
  • 規則輕量: 基于規則文件來編排流程,學習規則入門只需要5分鐘,一看即懂。
  • 規則多樣化: 規則支持xml、json、yml三種規則文件寫法方式,喜歡哪種用哪個。
  • 任意編排: 同步異步混編,再復雜的邏輯過程,利用LiteFlow的規則,都是很容易做到的,看規則文件就能知道邏輯是如何運轉的。
  • 規則能從任意地方加載: 框架中提供本地文件配置源和zk配置源的實現,也提供了擴展接口,您可以把規則存儲在任何地方。
  • 優雅熱刷新機制: 規則變化,無需重啟您的應用,即時改變應用的規則。高并發下不會因為刷新規則導致正在執行的規則有任何錯亂。
  • 支持廣泛: 不管你的項目是不是基于Springboot,Spring還是任何其他JAVA框架構建,LiteFlow都能游刃有余。
  • JDK支持: 從JDK8到JDK17,統統支持。無需擔心JDK版本。
  • 腳本語言支持: 可以定義腳本語言節點,支持QLExpress和Groovy兩種腳本。未來還會支持更多的腳本語言。
  • 規則嵌套支持: 只要你想得出,你可以利用簡單的表達式完成多重嵌套的復雜邏輯編排。
  • 組件重試支持: 組件可以支持重試,每個組件均可自定義重試配置和指定異常。
  • 上下文隔離機制: 可靠的上下文隔離機制,你無需擔心高并發情況下的數據串流。
  • 聲明式組件支持: 你可以讓你的任意類秒變組件。
  • 詳細的步驟信息: 你的鏈路如何執行的,每個組件耗時多少,報了什么錯,一目了然。
  • 穩定可靠: 歷時2年多的迭代,在各大公司的核心系統上穩定運行。
  • 性能卓越: 框架本身幾乎不消耗額外的性能,性能取決你的組件執行效率。
  • 自帶簡單監控: 框架內自帶一個命令行的監控,能夠知道每個組件的運行耗時排行。

 

系統架構

 

框架優勢

如果你要對復雜業務邏輯進行新寫或者重構,用LiteFlow最合適不過。它是一個輕量,快速的組件式規則引擎框架,組件編排,幫助解耦業務代碼,讓每一個業務片段都是一個組件,并支持熱加載規則配置,實現即時修改。

LiteFlow利用規則表達式為驅動引擎,去驅動你定義的組件。你有想過類似以下的多線程流程編排該如何寫嗎?

 

 

這一切利用LiteFlow輕而易舉!框架的表達式語言學習門檻很低,但是卻可以完成超高復雜度的編排。

 

適用場景

不適用于哪些場景:

LiteFlow只做基于邏輯的流轉,而不做基于角色任務的流轉。如果你想做基于角色任務的流轉,推薦使用flowable,activiti這2個框架。

適用于哪些場景:

LiteFlow適用于擁有復雜邏輯的業務,比如說價格引擎,下單流程等,這些業務往往都擁有很多步驟,這些步驟完全可以按照業務粒度拆分成一個個獨立的組件,進行裝配復用變更。使用LiteFlow,你會得到一個靈活度高,擴展性很強的系統。因為組件之間相互獨立,也可以避免改一處而動全身的這樣的風險。

 

Springboot場景安裝運行

依賴:

<dependency>
    <groupId>com.yomahub</groupId>
    <artifactId>liteflow-spring-boot-starter</artifactId>
    <version>2.8.2</version>
</dependency>

配置:

組件的定義:

1、在依賴了以上jar包后,你需要定義并實現一些組件,確保SpringBoot會掃描到這些組件并注冊進上下文

@Component("a")
public class ACmp extends NodeComponent {

	@Override
	public void process() {
		//do your business
	}
}

2、以此類推再分別定義b,c組件

@Component("b")
public class BCmp extends NodeComponent {

	@Override
	public void process() {
		//do your business
	}
}
@Component("c")
public class CCmp extends NodeComponent {

	@Override
	public void process() {
		//do your business
	}
}

SpringBoot配置文件:

然后,在你的SpringBoot的Application.properties或者application.yml里添加配置(這里以properties為例,yaml也是一樣的)

liteflow.rule-source=config/flow.el.xml

規則文件的定義:

同時,你得在resources下的config/flow.el.xml中定義規則

<?xml version="1.0" encoding="UTF-8"?>
<flow>
    <chain name="chain1">
        THEN(a, b, c);
    </chain>
</flow>

SpringBoot在啟動時會自動裝載規則文件。

執行:

聲明啟動類:

@SpringBootApplication
//把你定義的組件掃入Spring上下文中
@ComponentScan({"com.xxx.xxx.cmp"})
public class LiteflowExampleApplication {

    public static void main(String[] args) {
        SpringApplication.run(LiteflowExampleApplication.class, args);
    }
}

然后你就可以在Springboot任意被Spring托管的類中拿到flowExecutor,進行執行鏈路:

@Component
public class YourClass{
    
    @Resource
    private FlowExecutor flowExecutor;
    
    public void testConfig(){
        LiteflowResponse response = flowExecutor.execute2Resp("chain1", "arg");
    }
}

提示:

這個DefaultContext是默認的上下文,用戶可以用最自己的任意Bean當做上下文傳入,如果需要傳入自己的上下文,則需要傳用戶Bean的Class屬性,具體請看數據上下文這一章節。

 

示例

這個案例為一個價格計算引擎,其目的是模擬了電商中對訂單價格的計算。

 

 

—END—

開源協議:Apache2.0

開源地址:
https://github.com/dromara/liteflow

分享到:
標簽:LiteFlow
用戶無頭像

網友整理

注冊時間:

網站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網站吧!
最新入駐小程序

數獨大挑戰2018-06-03

數獨一種數學游戲,玩家需要根據9

答題星2018-06-03

您可以通過答題星輕松地創建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數有氧達人2018-06-03

記錄運動步數,積累氧氣值。還可偷

每日養生app2018-06-03

每日養生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定