您当前的位置:首页 > 电脑百科 > 程序开发 > 语言 > .NET

.NET 轻量级工作流引擎

时间:2023-05-21 14:54:50  来源:今日头条  作者:opendotnet
   Workflow-Core    

Workflow-Core 是一个开源的工作流引擎项目,它提供了一个轻量级的框架,用于在.NET 应用程序中创建和管理工作流程。它基于.NET Standard,并且可以在各种平台上运行,包括 windowslinuxmacOS。

功能特性    

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/


Tags:.NET   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,不构成投资建议。投资者据此操作,风险自担。如有任何标注错误或版权侵犯请与我们联系,我们将及时更正、删除。
▌相关推荐
.Net开发中十种常见的内存错误以及相应的解决方案
在.Net开发中,为内存管理方面提供了许多便利,但仍然存在一些常见的错误和陷阱。这些错误可能导致内存泄漏、性能下降、异常抛出等问题,严重影响应用程序的稳定性和性能。在软件...【详细内容】
2024-03-26  Search: .NET  点击:(12)  评论:(0)  加入收藏
.NET配置文件大揭秘:轻松读取JSON、XML、INI和环境变量
概述:.NET中的IConfiguration接口提供了一种多源读取配置信息的灵活机制,包括JSON、XML、INI文件和环境变量。通过示例,清晰演示了从这些不同源中读取配置的方法,使配置获取变得...【详细内容】
2023-12-28  Search: .NET  点击:(92)  评论:(0)  加入收藏
.Net开发都应当掌握的泛型基础知识集合
在C#编程语言中,泛型是一项非常强大和重要的功能。它允许我们编写更加灵活和通用的代码,同时提高代码的可重用性和性能。本文将介绍C#泛型的一些关键知识点,帮助读者理解和应用...【详细内容】
2023-12-25  Search: .NET  点击:(124)  评论:(0)  加入收藏
作为 .NET 开发人员,我为什么开始使用 Python?
作者 | Alex Maher编译 | 小欧作为一名 .NET 开发人员,很长一段时间以来,我一直关注 C# 和 .NET 的出色工具和功能。但我最近开始使用 Python,感觉非常棒。这里申明一点,这篇文...【详细内容】
2023-12-25  Search: .NET  点击:(143)  评论:(0)  加入收藏
.NET领域性能最好的对象映射框架Mapster使用方法
Mapster是一个开源的.NET对象映射库,它提供了一种简单而强大的方式来处理对象之间的映射。在本文中,我将详细介绍如何在.NET中使用Mapster,并提供一些实例和源代码。和其它框架...【详细内容】
2023-12-22  Search: .NET  点击:(79)  评论:(0)  加入收藏
.NET Core 3.1 升级到 .NET 8,看看都有哪些变化
.NET Core 3.1 已经用了很长一段时间,其实在 2022 年的年底微软已经不提供支持了,后面的一个 LTS 版本 .NET 6 也会在 2024 年 11 月终止支持,所以直接升级到 .NET 8 是最好的...【详细内容】
2023-12-08  Search: .NET  点击:(192)  评论:(0)  加入收藏
.NET Core的中间件来对Web API进行流量限制实现方法
在.NET Core中,我们可以使用ASP.NET Core的中间件来对Web API进行流量限制。ASP.NET Core提供了一个名为RateLimit的开源库,可以方便地实现流量限制功能。下面将详细介绍如何...【详细内容】
2023-12-06  Search: .NET  点击:(177)  评论:(0)  加入收藏
微软官方出品微服务架构:十个.Net开源项目
1、一个高性能类型安全的.NET枚举实用开源库Enums.NET是一个.NET枚举实用程序库,专注于为枚举提供丰富的操作方法。它支持.NET Framework和.Net Core。它主要优点表现在类型...【详细内容】
2023-12-06  Search: .NET  点击:(132)  评论:(0)  加入收藏
.NET开源的处理分布式事务的解决方案
前言在分布式系统中,由于各个系统服务之间的独立性和网络通信的不确定性,要确保跨系统的事务操作的最终一致性是一项重大的挑战。今天给大家推荐一个.NET开源的处理分布式事务...【详细内容】
2023-11-30  Search: .NET  点击:(173)  评论:(0)  加入收藏
深入 .NET 异步编程:Task 与 ValueTask 的区别与选择
在 .NET 中,Task 和 ValueTask 都是用于表示异步操作的类型,但它们有一些重要的区别。TaskTask 是最常见的表示异步操作的类型。它通常用于表示耗时的、异步的操作,比如从文件...【详细内容】
2023-11-26  Search: .NET  点击:(190)  评论:(0)  加入收藏
▌简易百科推荐
.Net开发中十种常见的内存错误以及相应的解决方案
在.Net开发中,为内存管理方面提供了许多便利,但仍然存在一些常见的错误和陷阱。这些错误可能导致内存泄漏、性能下降、异常抛出等问题,严重影响应用程序的稳定性和性能。在软件...【详细内容】
2024-03-26  小乖兽技术  今日头条  Tags:.Net   点击:(12)  评论:(0)  加入收藏
.NET配置文件大揭秘:轻松读取JSON、XML、INI和环境变量
概述:.NET中的IConfiguration接口提供了一种多源读取配置信息的灵活机制,包括JSON、XML、INI文件和环境变量。通过示例,清晰演示了从这些不同源中读取配置的方法,使配置获取变得...【详细内容】
2023-12-28  架构师老卢  今日头条  Tags:.NET   点击:(92)  评论:(0)  加入收藏
.Net开发都应当掌握的泛型基础知识集合
在C#编程语言中,泛型是一项非常强大和重要的功能。它允许我们编写更加灵活和通用的代码,同时提高代码的可重用性和性能。本文将介绍C#泛型的一些关键知识点,帮助读者理解和应用...【详细内容】
2023-12-25  小乖兽技术  今日头条  Tags:.Net   点击:(124)  评论:(0)  加入收藏
作为 .NET 开发人员,我为什么开始使用 Python?
作者 | Alex Maher编译 | 小欧作为一名 .NET 开发人员,很长一段时间以来,我一直关注 C# 和 .NET 的出色工具和功能。但我最近开始使用 Python,感觉非常棒。这里申明一点,这篇文...【详细内容】
2023-12-25    51CTO  Tags:.NET   点击:(143)  评论:(0)  加入收藏
.NET Core 3.1 升级到 .NET 8,看看都有哪些变化
.NET Core 3.1 已经用了很长一段时间,其实在 2022 年的年底微软已经不提供支持了,后面的一个 LTS 版本 .NET 6 也会在 2024 年 11 月终止支持,所以直接升级到 .NET 8 是最好的...【详细内容】
2023-12-08  不止dotNET  微信公众号  Tags:.NET   点击:(192)  评论:(0)  加入收藏
.NET Core的中间件来对Web API进行流量限制实现方法
在.NET Core中,我们可以使用ASP.NET Core的中间件来对Web API进行流量限制。ASP.NET Core提供了一个名为RateLimit的开源库,可以方便地实现流量限制功能。下面将详细介绍如何...【详细内容】
2023-12-06  架构师老卢  今日头条  Tags:.NET   点击:(177)  评论:(0)  加入收藏
微软官方出品微服务架构:十个.Net开源项目
1、一个高性能类型安全的.NET枚举实用开源库Enums.NET是一个.NET枚举实用程序库,专注于为枚举提供丰富的操作方法。它支持.NET Framework和.Net Core。它主要优点表现在类型...【详细内容】
2023-12-06  编程乐趣  今日头条  Tags:.Net   点击:(132)  评论:(0)  加入收藏
.NET开源的处理分布式事务的解决方案
前言在分布式系统中,由于各个系统服务之间的独立性和网络通信的不确定性,要确保跨系统的事务操作的最终一致性是一项重大的挑战。今天给大家推荐一个.NET开源的处理分布式事务...【详细内容】
2023-11-30  追逐时光者  微信公众号  Tags:.NET   点击:(173)  评论:(0)  加入收藏
深入 .NET 异步编程:Task 与 ValueTask 的区别与选择
在 .NET 中,Task 和 ValueTask 都是用于表示异步操作的类型,但它们有一些重要的区别。TaskTask 是最常见的表示异步操作的类型。它通常用于表示耗时的、异步的操作,比如从文件...【详细内容】
2023-11-26  架构师老卢  微信公众号  Tags: .NET   点击:(190)  评论:(0)  加入收藏
.NET字符串存储:解析常量与动态字符串,深入了解内存机制
在 .NET 中,字符串是不可变的,这意味着一旦创建,字符串的内容就不能被修改。字符串在内存中以不同的方式存储,具体取决于它是常量字符串还是动态创建的字符串。常量字符串常量字...【详细内容】
2023-11-25  架构师老卢  微信公众号  Tags:.NET   点击:(195)  评论:(0)  加入收藏
站内最新
站内热门
站内头条