首页 > 其他分享 >Elsa 创建并启动一个工作流

Elsa 创建并启动一个工作流

时间:2023-05-10 22:11:19浏览次数:45  
标签:启动 创建 Elsa Build Activity 源代码 IWorkflowBuilder

以前写了一半,Elsa 3.0重新进行了设计,又不想写了,唉, 2023-04-5

已过时,最新版请参考 Elsa 3.0 ,3.0中相关重新进行了设计

 

 

 

前言:

  学习而已,初见Elsa时,感觉很奇妙,到底是什么样的思想才能够设计出这么巧妙的程序...

  长风破浪会有时,直挂云帆济沧海。

   学习过程记录下来,以后忘了回头看看。

工作流创建

  代码来自Elsa源代码库。

  如下图定义一个简单的工作流

  

使用 IBuildsAndStartsWorkflow 创建工作流  

  

  进入源代码查看创建过程,如下图使用 WorkflowBuilderFactory 工作流构建工厂创建一个工作流

  

 

  这里有个很奇怪的地方 “_workflowBuilderFactory()” ,居然还可以注册一个 “Func<IWorkflowBuilder>” 返回IWorkflowBuilder类型的委托,我还是头一次见这么玩的,在下佩服。

  通过源代码看来,注册成“Func<IWorkflowBuilder>”其实就是每次都是获取一个新的 “IWorkflowBuilder” 对象,源代码如下图

  

 

 

   调用 Build<T>() 方法,创建工作流蓝图,进入源代码,会进入到下图所示代码中

  

 

 

   该代码主要就是从 IOC 容器中创建出一个指定类型的对象,如下图,反编译查看源代码

  

 

 

   执行 “ Build(workflow, activityIdPrefix) ” 创建工作流,Build中的具体源代码

  

 

 

  1. 该类为 WorkflowBuilder ,继承 IWorkflowBuilder、CompositeActivityBuilder ,关于 IWorkflowBuilder 相关信息查看这里
  2. 默认获取该工作流名称
  3. 设置Name属性
  4. 设置DisplayName属性
  5.  进入WithId的方法源代码如图 ,因为WorkflowBuilder 也继承 IActivityBuilder ,也就是说,该工作流整体也可以表示为一个Activity ,那么此处就是设置ActivityId
  6.  

     workflow.Build(this) 就是调用自定义工作流中的public void Build(IWorkflowBuilder builder) 方法,如下图

 

   

 

  7. 创建蓝图

具体介绍下 workflow.Build(this) 也就是 Build(IWorkflowBuilder builder)

  IWorkflowBuilder

    关于 IWorkflowBuilder 相关信息查看这里 ,对IWorkflowBuilder要有一个大致的印象。

    IWorkflowBuilder 继承 IBuilder,IBuilder 源代码如下图

    

 

    翻译过来就是说,可以添加任意一个Activity到IBuilder中。也就是说 IWorkflowBuilder 可以添加 任意 Activity 到 IWorkflowBuilder 对象中。

    接下来看一个 Activity ,WriteLine 是一个 Activity 如下图

    

 

     进入到源代码中,如下图,中间不相关代码省略了

    

 

     CallerLineNumber 、 CallerFilePath 这几个参数忽略,这几个参数就是用来调试用的,相关信息,上网搜索。

    builder.WriteLine(".....") , 会进入到上图中 1 中

 

 

    

 

 

 

 

 

  

标签:启动,创建,Elsa,Build,Activity,源代码,IWorkflowBuilder
From: https://www.cnblogs.com/youlicc/p/17307830.html

相关文章

  • 广告冷启动建模
    背景在广告系统中存在大量冷启动广告,冷启动广告由于数据比较少模型很估准,下面总结冷启动广告建模的常用思路 建模方法1.采用泛化特征冷启动的广告由于样本比较少,id类的特征得不到充分学习,一般都是一个随机值或0,会导致模型预估不准确。因此可以下掉id类特征,只用泛化特征训练......
  • python创建虚拟环境
    创建虚拟环境所用包virtualenv查看是否有虚拟环境virtualenv--version安装虚拟环境命令pipinstallvirtualenv创建虚拟环境(.venv是环境名字,可以随意取)virtualenv.venv激活虚拟环境cd.venv/Scripts目录下执行activate执行成功后即可此时即可安装第三方库或者运......
  • 【pytorch】理解张量,了解张量的创建和操作
    深度学习的核心是卷积,卷积的核心是张量(Tensor)理解TensorTensor可以简单理解为是标量、向量、矩阵的高维扩展。你可以把张量看作多维数组,但相较于ndarray,Tensor包含了grad、requires_grad、grad_fn、device等属性,是为服务于神经网络而设计的类型,标量可以看作是零维张量、......
  • 【Azure 媒体服务】Media Service的编码示例 -- 创建缩略图子画面的.NET代码调试问题
    问题描述在中国区Azure上,使用MediaService服务,想要使用.NET的代码来对上传视频创建缩略图(Thumbnail)。通过官网文档(https://docs.azure.cn/zh-cn/media-services/latest/samples/samples-encoding-reference#create-a-thumbnail-sprite)下载.NET示例,配置appsettings.json......
  • 启动flink sql 任务
    README.md#howtouse#使用说明##确认是否初始化完成,当前yarn-session管理所有《用户属性任务》##任务名称为:bus_user_info_flinkjobpath=`pwd`00.确认是否已经存在yarnsession`shellyarnapp-list|grepapp_log_2_hudi_flinkJob`1.若未运行yarn......
  • .bat 判断并启动一个系统服务
    @echooffREM定义服务名称变量setSERVICE_NAME=RemoteClientREM检查服务状态scquery%SERVICE_NAME%|findstrRUNNING>nulif%errorlevel%equ0(echo%SERVICE_NAME%isalreadyrunning.)else(REM启动服务netstart%SERVICE_NAME%......
  • elementui plus - 下载组件库vue包,本地启动
    1.背景这个地址https://element-plus.gitee.io/zh-CN/经常打不开所以,可以去git仓库获取工程源码【虽然已经打包过的】2.解决仓库地址https://gitee.com/element-plus/doc-archive.git克隆到本地后,找到index文件夹,启动临时工程 3.效果 ......
  • 在WSL中使用code .启动VSCode失败解决方法
    按照windows的官网教程https://docs.microsoft.com/zh-cn/windows/wsl/tutorials/wsl-vscode安装VScode之后,在wsl终端输入code.显示指令不存在解决办法:通过 vim~/.bashrc 打开.bashrc文件,添加:exportPATH="$PATH:/mnt/c/Users/XXX/AppData/Local/Programs/MicrosoftVS......
  • Windows下安装Redis,并设置开机自动启动
    这篇文章是在Windows上安装redis,关于如何在Linux上安装redis可以参看Redis下载地址:https://github.com/tporadowski/redis/releases1.下载redis,并解压2.打开cmd命令行进入redis文件夹下,输入如下命令redis-server.exeredis.windows.conf 3.打开一个新的cmd,输入命令redis-serve......
  • mysql创建systemd管理项
    vim/usr/lib/systemd/system/mysqld.service写入system配置:[Unit]Description=MySQLServerDocumentation=mysqld##mysql参考手册Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.htmlAfter=network.targetAfter=syslog.target[Install]WantedBy=mul......