Workflow-Core
Workflow-Core 是一個開源的工作流引擎項目,它提供了一個輕量級的框架,用于在.NET 應(yīng)用程序中創(chuàng)建和管理工作流程。它基于.NET Standard,并且可以在各種平臺上運行,包括 windows、linux 和 macOS。
功能特性1. 靈活的工作流程定義:使用 Workflow-Core,您可以輕松定義和構(gòu)建復(fù)雜的工作流程。工作流程由一系列步驟(Activities)組成,這些步驟可以串行、并行或條件性地執(zhí)行。您可以定義工作流程的輸入和輸出參數(shù),以及每個步驟的條件和依賴關(guān)系。
2. 可擴(kuò)展性和可定制性:Workflow-Core 允許您擴(kuò)展和自定義工作流引擎的行為。您可以編寫自己的活動(Activity)和觸發(fā)器(Trigger),以滿足特定的業(yè)務(wù)需求。還可以通過自定義的服務(wù)注入(Dependency Injection)來定制工作流程的行為。
3. 持久化和恢復(fù):Workflow-Core 支持工作流程的持久化和恢復(fù)。這意味著即使在應(yīng)用程序關(guān)閉或崩潰后,工作流程的狀態(tài)也會得到保存,并且可以在應(yīng)用程序重新啟動時繼續(xù)執(zhí)行。它使用持久化提供程序(Persistence Provider)將工作流程數(shù)據(jù)保存到數(shù)據(jù)庫或其他持久化存儲中。
4. 監(jiān)控和跟蹤:Workflow-Core 提供了監(jiān)控和跟蹤工具,用于實時跟蹤工作流程的執(zhí)行狀態(tài)和性能指標(biāo)。您可以使用這些工具來診斷問題、優(yōu)化性能和監(jiān)控工作流程的整體健康狀況。
5. 輕量級和高性能:Workflow-Core 設(shè)計為輕量級和高性能。它采用異步執(zhí)行模型,并且在處理大量并發(fā)工作流程時具有良好的性能表現(xiàn)。它還提供了緩存機(jī)制和并行執(zhí)行,以提高工作流程的執(zhí)行效率。
如何使用安裝 NuGet 包“WorkflowCore”
dotnet add package WorkflowCoreFluent API
使用 Fluent API 定義工作流。
public class MyWorkflow : IWorkflow { public void Build(IWorkflowBuilder<MyData> builder) { builder .StartWith<Task1>() .Then<Task2>() .Then<Task3>; } } 基本概念工作流由一系列相互關(guān)聯(lián)的步驟組成。每個步驟都可以有輸入并產(chǎn)生輸出,這些輸出可以傳遞回它所在的工作流。
通過創(chuàng)建繼承自StepBody或StepBodyAsync抽象類的類并實現(xiàn) Run/RunAsync 方法來定義步驟。
看看下面的例子:
public class HelloWorld : StepBody { public override ExecutionResult Run(IStepExecutionContext context) { Console.WriteLine("Hello world"); return ExecutionResult.Next(); } }然后我們通過組成一系列步驟來定義工作流結(jié)構(gòu)。這是通過實現(xiàn) IWorkflow 接口完成的,如下:
public class HelloWorldWorkflow : IWorkflow { public string Id => "HelloWorld"; public int Version => 1; public void Build(IWorkflowBuilder<object> builder) { builder .StartWith<HelloWorld>() .Then<GoodbyeWorld>(); } }Workflow-Core 還支持了 JSON 和 YAML 格式,在 JSON 中實現(xiàn)的這個工作流看起來像這樣:
{ "Id": "HelloWorld", "Version": 1, "Steps": [ { "Id": "Hello", "StepType": "MyApp.HelloWorld, MyApp", "NextStepId": "Bye" }, { "Id": "Bye", "StepType": "MyApp.GoodbyeWorld, MyApp" } ] } 與 ASP.NET Core 一起使用在您的啟動類中,使用AddWorkflow擴(kuò)展方法配置工作流核心服務(wù),如下
public class Startup { public Startup(IConfiguration configuration) { Configuration = configuration; } public IConfiguration Configuration { get; } public void ConfigureServices(IServiceCollection services) { services.AddMvc(); services.AddWorkflow(cfg => { cfg.UseMongoDB(@"mongodb://mongo:27017", "workflow"); cfg.UseElasticsearch(new ConnectionSettings(new Uri("http://elastic:9200")), "workflows"); }); } public void Configure(IApplicationBuilder app, IHostingEnvironment env) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } app.UseMvc(); var host = app.ApplicationServices.GetService<IWorkflowHost>(); host.RegisterWorkflow<TestWorkflow, MyDataClass>(); host.Start(); } } 持久化由于工作流通常是長時間運行的過程,因此它們需要在步驟之間持久存儲。有幾個持久性提供程序可作為單獨的 Nuget 包使用。
• MemoryPersistenceProvider
• MongoDB
• SQL Server
• PostgreSQL
• Sqlite
• Amazon DynamoDB
• Cosmos DB
• redis
多節(jié)點集群默認(rèn)情況下,WorkflowHost 服務(wù)將作為單個節(jié)點運行,如果您希望運行多節(jié)點集群,則需要配置外部 MQ 和分布式鎖管理器來協(xié)調(diào)集群。
這里可以使用 Redis 和 RabbitMQ。
項目地址 https://workflow-core.readthedocs.io/