天天看點

.NET 輕量級工作流引擎

.NET 輕量級工作流引擎
.NET 輕量級工作流引擎
.NET 輕量級工作流引擎

Workflow-Core

Workflow-Core 是一個開源的工作流引擎項目,它提供了一個輕量級的架構,用于在.NET 應用程式中建立和管理工作流程。它基于.NET Standard,并且可以在各種平台上運作,包括 Windows、Linux 和 macOS。

功能特性

  1. 1. 靈活的工作流程定義:使用 Workflow-Core,您可以輕松定義和建構複雜的工作流程。工作流程由一系列步驟(Activities)組成,這些步驟可以串行、并行或條件性地執行。您可以定義工作流程的輸入和輸出參數,以及每個步驟的條件和依賴關系。
  2. 2. 可擴充性和可定制性:Workflow-Core 允許您擴充和自定義工作流引擎的行為。您可以編寫自己的活動(Activity)和觸發器(Trigger),以滿足特定的業務需求。還可以通過自定義的服務注入(Dependency Injection)來定制工作流程的行為。
  3. 3. 持久化和恢複:Workflow-Core 支援工作流程的持久化和恢複。這意味着即使在應用程式關閉或崩潰後,工作流程的狀态也會得到儲存,并且可以在應用程式重新啟動時繼續執行。它使用持久化提供程式(Persistence Provider)将工作流程資料儲存到資料庫或其他持久化存儲中。
  4. 4. 監控和跟蹤:Workflow-Core 提供了監控和跟蹤工具,用于實時跟蹤工作流程的執行狀态和性能名額。您可以使用這些工具來診斷問題、優化性能和監控工作流程的整體健康狀況。
  5. 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/

.NET 輕量級工作流引擎

分享

.NET 輕量級工作流引擎

點收藏

.NET 輕量級工作流引擎

繼續閱讀