title: .NET 轻量级工作流引擎
updated: 2023-09-15 07:58:10Z
created: 2023-09-15 07:58:10Z
source: https://mp.weixin.qq.com/s/Q3B8tUwqosNLcX6_5_Ka3Q
tags:
- dotnetframework
欢迎来到 Dotnet 工具箱!在这里,你可以发现各种令人惊喜的开源项。
公众号内回复 上海找工作
获取 2023 上海 .NET 公司列表。
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 addpackageWorkflowCore
Fluent API
使用 Fluent API 定义工作流。
publicclassMyWorkflow:IWorkflow
{
publicvoidBuild(IWorkflowBuilder<MyData> builder)
{
builder
.StartWith<Task1>()
.Then<Task2>()
.Then<Task3>;
}
}
基本概念
工作流由一系列相互关联的步骤组成。每个步骤都可以有输入并产生输出,这些输出可以传递回它所在的工作流。
通过创建继承自StepBody
或StepBodyAsync
抽象类的类并实现 Run/RunAsync 方法来定义步骤。
看看下面的例子:
publicclassHelloWorld:StepBody
{
publicoverrideExecutionResultRun(IStepExecutionContext context)
{
Console.WriteLine("Hello world");
returnExecutionResult.Next();
}
}
然后我们通过组成一系列步骤来定义工作流结构。这是通过实现 IWorkflow 接口完成的,如下:
publicclassHelloWorldWorkflow:IWorkflow
{
publicstringId=>"HelloWorld";
publicintVersion=>1;
publicvoidBuild(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
扩展方法配置工作流核心服务,如下
publicclassStartup
{
publicStartup(IConfiguration configuration)
{
Configuration= configuration;
}
publicIConfigurationConfiguration{get;}
publicvoidConfigureServices(IServiceCollection services)
{
services.AddMvc();
services.AddWorkflow(cfg =>
{
cfg.UseMongoDB(@"mongodb://mongo:27017","workflow");
cfg.UseElasticsearch(newConnectionSettings(newUri("http://elastic:9200")),"workflows");
});
}
publicvoidConfigure(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。
往期推荐:
DotNetCorePlugins- 动态加载和卸载 .NET 程序插件
项目地址
https://workflow-core.readthedocs.io/
公众号内回复 上海找工作
获取 2023 上海 .NET 公司列表。
分享
点收藏
点点赞
点在看