首页 > 其他分享 >.NET 轻量级工作流引擎

.NET 轻量级工作流引擎

时间:2023-12-06 11:11:41浏览次数:22  
标签:Core Workflow 流程 工作 引擎 NET 轻量级

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

.NET 轻量级工作流引擎

欢迎来到 Dotnet 工具箱!在这里,你可以发现各种令人惊喜的开源项。

公众号内回复 上海找工作

获取 2023 上海 .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 addpackageWorkflowCore

Fluent API

使用 Fluent API 定义工作流。

publicclassMyWorkflow:IWorkflow  
{  
publicvoidBuild(IWorkflowBuilder<MyData> builder)  
{  
        builder  
.StartWith<Task1>()  
.Then<Task2>()  
.Then<Task3>;  
}  
}

基本概念

工作流由一系列相互关联的步骤组成。每个步骤都可以有输入并产生输出,这些输出可以传递回它所在的工作流。

通过创建继承自StepBodyStepBodyAsync抽象类的类并实现 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。

往期推荐:

JIEJIE.NET - 强大的 .NET 代码混淆工具

Dots - 更友好的 .NET SDK 管理器

DotNetCorePlugins- 动态加载和卸载 .NET 程序插件

分布式唯一 ID 生成器 - IDGen

开源力作!使用 Blazor 和 C# 管理 K8s

项目地址

https://workflow-core.readthedocs.io/

公众号内回复 上海找工作

获取 2023 上海 .NET 公司列表。

分享

点收藏

点点赞

点在看

标签:Core,Workflow,流程,工作,引擎,NET,轻量级
From: https://www.cnblogs.com/mengkai/p/17879077.html

相关文章

  • KubeKey 升级 KubeSphere 和 Kubernetes 补丁版本实战指南
    作者:运维有术前言知识点定级:入门级KubeKey如何升级KubeSphere补丁版本KubeKey如何升级Kubernetes补丁版本KubeSphere和Kubernetes升级准备及验证KubeKey升级KubeSphere和Kubernetes的常见问题实战服务器配置(架构1:1复刻小规模生产环境,配置略有不同)......
  • NET Core 3.1 MVC 在html中引用js的方法使用时不生效异常
    在html的select元素添加了onchange事件,changeContent方法也在当前html下。<selectid="changeLanguage"class="form-controlinput-lg"asp-for="language"asp-items="Model.supportedLanguages"onchange="changeContent()">&l......
  • 使用阿里云服务器部署.net 6 mvc 程序(使用域名)
    1.创建Web程序打开vs2022,选择ASP.NETCoreWeb应用(模型-视图-控制器)创建项目。修改Program.cspublicstaticvoidMain(string[]args){varbuilder=WebApplication.CreateBuilder(args);//Addservicestothecontainer.builder.Services.AddControllers......
  • .net下优秀的日志框架Serilog,你用上了吗?强烈推荐
     在.NET开发中,Serilog是一款广受欢迎的日志库,它提供了强大的日志记录功能,具有丰富的特性和高度的可扩展性。Serilog的优秀之处包括:可扩展性:Serilog可以轻松扩展以满足不同的日志记录需求,例如日志存储、格式化和过滤。它支持各种插件和自定义扩展,让你可以根据项目的具......
  • pointnet cfd训练
    1#####Point-clouddeeplearningforpredictionoffluidflowfieldsonirregulargeometries(supervisedlearning)#####9importos#提供与操作系统交互的功能,例如文件和目录操作。10importlinecache#提供从文件中读取特定行的方法。11importmath......
  • .NET(C#) 对象判等
    值类型变量判断就是比较值是否相等,而引用类型的对象判断是否相等,一般是判断指定的对象是否是相同的实例。也就是比较对象引用的值,但是也有可能有特殊情况,虽然不是相同的实例,但在业务上可能是相等的。就要结合具体的情况判断是否相等了。一般判断对象是否相等的方法有4种。......
  • .NET微信网页开发相关文章教程
    前言今天我们主要总结一下.NET微信网页开发的相关文章教程。微信网页开发详细文档可以看微信官方文档:https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/Wechat_webpage_authorization.html 全面的.NET微信网页开发之JS-SDK使用步骤、配置信息和接口请求签名......
  • .NET Core 开发的支付SDK集 - paylink
    一套基于.NETCore开发的支付SDK集-paylink 前言在我们的日常工作开发中对接一些第三方支付是比较常见的,如最常见的就是支付宝、微信支付的对接。今天给大家推荐一个基于.NETCore开发的支付SDK集:paylink,它极大简化了API调用及通知的处理流程从而大大提供我们的工作生......
  • Linux监测工具 - NetData
    安装yuminstall-ynetdata.x86_64配置vi/etc/netdata/netdata.conf##修改默认端口,默认为:19999defaultport=19999##修改bindto=localhost为bindto=0.0.0.0bindto=0.0.0.0##重启systemctlrestartnetdata访问地址http://localhost:19999/netda......
  • ML.NET 3.0 增强了深度学习和数据处理能力
    .NET团队在2023.11.28在博客上正式发布了ML.NET3.0::https://devblogs.microsoft.com/dotnet/announcing-ml-net-3-0/[1],强调了两个主要的兴趣点,即深度学习和数据处理,使开发人员能够完全在.NET生态系统中创建注入AI的应用程序。开源ML.NET框架[2]的主要卖点,旨在帮助开发人......