2d627354fd138a64007421fe92d02836.png

bfdda04a1ac3974b20c78ff62e521ac1.gif

014ad31f2dae545691917065ec48773a.png

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>;
    }
}

基本概念

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

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

往期推荐:

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

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

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

分布式唯一 ID 生成器 - IDGen

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

项目地址

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

f1afc4953eb87e7e544b103229f8a75c.png

分享

a12a3898d20ff3e82ca5058e231f6b23.png

点收藏 

4c6a4ea168170a04d779a006eeb9b396.png

点点赞

22ede7078178f8bc3297602a211fbb5b.png

点在看

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐