开源工作流框架 workflow-core 的学习和使用

首先感谢作者能写出如此优雅的作品,作品地址:Workflow-Core

由于工作需要,需要在项目中添加工作流引擎,经过产品经理的选型,决定用这个,并且将这个任务分配给我。经过几天的研究,我在这边做一点简单的介绍,给将要使用的同仁做一点参考。详细的可以参考项目的 wiki 文档,不过都是英文的。

在我理解工作流是对某一个具体任务和任务之间业务规则的抽象,他将任务拆分为若干步骤,然后将这些步骤串起来,协同完成一个或多个任务。对于我们需要的分支/循环等,这个引擎都有着不错的支持。回到框架本身,最基本的他需要自行定义若干步骤(Step),代码中体现为继承StepBody,并实现对应的虚方法,我们来定义一个最基本的步骤:

    public class SayHello : StepBody
    {
        public override ExecutionResult Run(IStepExecutionContext context)
        {
            ("Hello Guys !").ConsoleWithTime();//自己拓展的方法,不要纠结我为啥这么写
            return ExecutionResult.Next();
        }
    }

各个步骤按照一定的顺序串起来就构成了工作流,以下来定义一个工作流:

    public class ChatWorkflow : IWorkflow
    {
        public string Id => "ChatWorkflow";

        public int Version => 1;

        public void Build(IWorkflowBuilder<object> builder)
        {
            builder
                .StartWith<SayHello>()
                .Then<Sing_A_Song>()
                .Then<SayGoodBye>();
        }
    }

到这边我们就完成了流的定义,剩下的工作就是让他动起来。

在启动工作流之前需要在服务中进行注册,注册完成我们就可以是start了。看代码:

    public class Program
    {
        static void Main(string[] args)
        {
            IServiceProvider serviceProvider = ConfigureServices();
            var host = serviceProvider.GetService<IWorkflowHost>();
            host.RegisterWorkflow<ChatWorkflow>();
            host.Start();
            host.StartWorkflow("ChatWorkflow");
            Console.ReadLine();
            host.Stop();
        }

        private static IServiceProvider ConfigureServices()
        {
            IServiceCollection services = new ServiceCollection();
            services.AddLogging();
            services.AddWorkflow();
            var builder = new ContainerBuilder();
            builder.Populate(services);
            return new AutofacServiceProvider(builder.Build());
        }
    }

结果来了:

很显然这个是最基本的功能实现,很多情况下是不满足我们要求的,接下来一起看看他的其他用法,我只简单介绍他可以做什么,不会一个个展开,他的文档中有些东西也很明了,如果有不明白的,留言我们一起探讨:

1、步骤间数据传递,步骤可以接收参数的,这样写一个步骤就可以实现多样的功能;

2、多种结果,类似分支结构,可以根据不同情况执行不同的步骤;

3、错误处理,可以捕捉执行过程中的异常,并处理,步骤的异常和流的异常都提供方法操作,出现出错可以设置挂起,终止和重试;

4、控制结构,支持循环/分支,还支持几个步骤并行执行;

5、支持持久化,提供MongoDB/SQL Server/PostgreSQL/Sqlite等拓展程序,可以直接使用;

6、支持集群;

7、支持从JSON加载工作流定义,但是步骤只能通过全限定名调用,意思只能加载流的定义,不能动态加载步骤的定义,步骤需要事先定义好,里面可以带参数;

8、计划和重复,可以设置定时执行和重复执行,可以设置满足某个条件时停止重复;

9、目标框架 .NET Standard 1.3 ,.net core也可以用;

10、我的学习能力有限,也没必要研究的很透,大家选型的时候可以作为参考,我列出来的并不是全部功能,如果有错误也请帮忙指出。

最后祝大家学习愉快。

发布了31 篇原创文章 · 获赞 56 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/maaici/article/details/88418157