.Net 轻量级工作流引擎 WorkflowCore的使用(六)——工作流持久化与恢复

WorkflowCore提供了几乎针对流行数据库的各种持久化方式,支持SqlServer、Sqlite等关系数据库,也支持MongoDb、Redis等非关系数据库。缺省使用的是在内存中保存流程数据,但在实际应用中,必须将流程数据持久化以保证系统的可靠性。当系统因为计划内或者意外原因出现异常后,正在执行的流程应该能够在断点处恢复并继续执行。我们改造一下第一部分的例子,增加持久化设置,并模拟流程中断和恢复过程。

首先,我们需要使用NuGet引入SqlServer持久化Provider:WorkflowCore.Persistence.SqlServer,当然也可以使用其它类型的数据存储。

然后,修改ConfigureServices,将services.AddWorkflow()修改为:

services.AddWorkflow(x => x.UseSqlServer(@"Server=.;Database=WorkflowCore;Trusted_Connection=True;", true, true));

最后修改一下执行代码,增加流程Id输入和恢复代码:

IServiceProvider serviceProvider = ConfigureServices();
            var host = serviceProvider.GetService<IWorkflowHost>();
            
            host.RegisterWorkflow<HelloWithNameWorkflowDynamic, Dictionary<string,string>>();
            host.Start();

            var initialData = new Dictionary<string,string>();

            Console.WriteLine("请输入需要恢复的流程编号,如执行新流程直接回车:");
            string workflowId = Console.ReadLine();
            
            if (string.IsNullOrEmpty(workflowId))
            {
                workflowId = host.StartWorkflow("HelloWithNameWorkflowDynamic", 1, initialData).Result;
                Console.WriteLine(workflowId);
            }
            else
            {
                host.ResumeWorkflow(workflowId);
            }
              

            
            Console.WriteLine("输入名字");
            string value = Console.ReadLine();
            host.PublishEvent("MyEvent", workflowId, value);

下面,我们模拟中断-恢复过程。首先,运行程序,不输入流程id,直接按回车,会生成新的流程,并输出流程Id,拷贝这个流程ID,并退出程序:


图片.png

再次执行程序,输入或粘贴上一次生成的流程编号,可以继续执行流程:


图片.png
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 语 句 功 能 数据操作 SELECT——从数据库表中检索数据行和列INSERT——向数据库表添加新数据行DELE...
    戰敭阅读 5,123评论 0 53
  • 一. Java基础部分.................................................
    wy_sure阅读 3,839评论 0 11
  • 第三章 数据库系统 3.1 数据库管理系统的类型 通常有多个分类标准。如按数据模型分类、按用户数分类、按数据库分布...
    步积阅读 2,795评论 0 7
  • 什么是数据驱动? 一个数据驱动的组织会以一种及时的方式获取、处理和使用数据来创造效益,不断迭代并开发新产品,以及在...
    Doris_LJ阅读 451评论 0 0
  • 姓名:刘宇(单位)哈尔滨中央红小月亮超市有限责任公司【日精进打卡第74天】20180922 学做六项精进:1.付出...
    彤彤_9e38阅读 102评论 0 0