Workflow-Core
Workflow-Core 是一個開源的工作流引擎項目,它提供了一個輕量級的架構,用于在.NET 應用程式中建立和管理工作流程。它基于.NET Standard,并且可以在各種平台上運作,包括 Windows、Linux 和 macOS。
功能特性
- 1. 靈活的工作流程定義:使用 Workflow-Core,您可以輕松定義和建構複雜的工作流程。工作流程由一系列步驟(Activities)組成,這些步驟可以串行、并行或條件性地執行。您可以定義工作流程的輸入和輸出參數,以及每個步驟的條件和依賴關系。
- 2. 可擴充性和可定制性:Workflow-Core 允許您擴充和自定義工作流引擎的行為。您可以編寫自己的活動(Activity)和觸發器(Trigger),以滿足特定的業務需求。還可以通過自定義的服務注入(Dependency Injection)來定制工作流程的行為。
- 3. 持久化和恢複:Workflow-Core 支援工作流程的持久化和恢複。這意味着即使在應用程式關閉或崩潰後,工作流程的狀态也會得到儲存,并且可以在應用程式重新啟動時繼續執行。它使用持久化提供程式(Persistence Provider)将工作流程資料儲存到資料庫或其他持久化存儲中。
- 4. 監控和跟蹤:Workflow-Core 提供了監控和跟蹤工具,用于實時跟蹤工作流程的執行狀态和性能名額。您可以使用這些工具來診斷問題、優化性能和監控工作流程的整體健康狀況。
- 5. 輕量級和高性能:Workflow-Core 設計為輕量級和高性能。它采用異步執行模型,并且在處理大量并發工作流程時具有良好的性能表現。它還提供了緩存機制和并行執行,以提高工作流程的執行效率。
如何使用
安裝 NuGet 包“WorkflowCore”
dotnet add package WorkflowCore
Fluent API
使用 Fluent API 定義工作流。
public class MyWorkflow : IWorkflow
{
public void Build(IWorkflowBuilder<MyData> builder)
{
builder
.StartWith<Task1>()
.Then<Task2>()
.Then<Task3>;
}
}
基本概念
工作流由一系列互相關聯的步驟組成。每個步驟都可以有輸入并産生輸出,這些輸出可以傳遞回它所在的工作流。
通過建立繼承自
StepBody
或
StepBodyAsync
抽象類的類并實作 Run/RunAsync 方法來定義步驟。
看看下面的例子:
public class HelloWorld : StepBody
{
public override ExecutionResult Run(IStepExecutionContext context)
{
Console.WriteLine("Hello world");
return ExecutionResult.Next();
}
}
然後我們通過組成一系列步驟來定義工作流結構。這是通過實作 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 中實作的這個工作流看起來像這樣:
{
"Id": "HelloWorld",
"Version": 1,
"Steps": [
{
"Id": "Hello",
"StepType": "MyApp.HelloWorld, MyApp",
"NextStepId": "Bye"
},
{
"Id": "Bye",
"StepType": "MyApp.GoodbyeWorld, MyApp"
}
]
}
與 ASP.NET Core 一起使用
在您的啟動類中,使用
AddWorkflow
擴充方法配置工作流核心服務,如下
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
多節點叢集
預設情況下,WorkflowHost 服務将作為單個節點運作,如果您希望運作多節點叢集,則需要配置外部 MQ 和分布式鎖管理器來協調叢集。
這裡可以使用 Redis 和 RabbitMQ。
項目位址
https://workflow-core.readthedocs.io/
分享
點收藏