基于.NET6 Elsa2.6的Elsa.Activities.Conductor使用问题咨询
Elsa 2.6 下 Elsa.Activities.Conductor 适配场景与接入方案
1. 当前业务场景是否适合使用Elsa Conductor
- 你目前已经跑通的单文档审批基础流程没必要硬上Conductor,现有HTTP端点触发+工作流信号驱动批准/驳回的方案足够轻量,稳定性也有保障,强行接入反而会增加不必要的系统复杂度。
- 后续你新增多工作流联动类需求的时候,Conductor就非常适配,比如多审批流串联/并行、审批通过后自动触发归档/通知等子流程、统一管控不同业务线工作流的生命周期、跨流程状态同步这类场景,用Conductor可以省掉大量手写事件转发、实例状态轮询的重复代码。
2. Elsa Conductor的编排对象与管控粒度
- Conductor的编排对象同时覆盖活动和工作流,不是只能做跨工作流的编排操作。
- 具体管控粒度分两层:
- 单工作流内部:支持对提前标记为Conductor管控的活动做启动、暂停、终止、重试操作,也可以直接给指定活动推送事件、传递参数,不需要靠全局信号做路由匹配。
- 跨工作流层面:支持定向或按规则批量启动、暂停、终止不同的工作流实例,支持配置父子流程的生命周期级联规则,比如父流程终止时自动停掉所有关联子流程,也可以等所有关联子流程执行完成后再推进父流程的后续节点。
注意:工作流里的普通活动默认不会被Conductor接管,只有设计时主动标记为注册到Conductor的任务节点,才会被纳入管控范围。
3. Elsa Conductor的实际接入步骤
- 第一步:核对依赖版本
你已经安装了Elsa.Activities.Conductor包,先确认包版本和当前项目用的Elsa 2.6主版本号完全一致,避免出现依赖冲突导致运行时报错。 - 第二步:服务与中间件注册
在.NET 6的Program.cs中添加Conductor的服务注册和端点映射,参考代码:
// 服务注册段 builder.Services.AddElsa(elsaConfig => { elsaConfig .AddHttpActivities() .AddWorkflowsFrom<Program>() // 注册Conductor核心能力 .AddConductor() // 如需开放Conductor的管控HTTP API,追加这行配置 .AddConductorApi(); }); // 中间件配置段 app.UseEndpoints(endpoints => { endpoints.MapHttpWorkflows(); // 映射Conductor API端点,默认路由前缀为/conductor endpoints.MapConductorApi(); });
- 第三步:工作流设计配置
- 单工作流内活动管控:在Elsa设计器中选中需要被Conductor调度的活动,找到Conductor配置分类,打开
Register Task开关,给该活动配置全局唯一的任务标识,后续就可以通过Conductor对这个节点做单独管控。 - 多工作流编排:直接在流程设计器中使用Conductor分类下的内置活动即可,高频使用的活动包括:
Run Workflow:指定工作流定义ID启动新实例,可配置是否等待子流程执行完成后再推进当前节点Suspend Workflow:传入工作流实例ID即可暂停对应运行中的流程Send Task Event:给指定的已注册Conductor任务推送事件、传递业务参数,驱动对应节点执行Cancel Task:终止指定的正在运行的Conductor管控任务
- 单工作流内活动管控:在Elsa设计器中选中需要被Conductor调度的活动,找到Conductor配置分类,打开
- 第四步:业务逻辑对接
业务侧不需要手写复杂的工作流实例查询、信号路由逻辑,既可以直接调用Conductor映射好的HTTP API做操作,也可以直接注入IConductorClient服务,用内置方法完成流程/任务的启停、参数传递操作,比原生的信号发送方式更精准,不会出现信号错发实例的问题。
内容的提问来源于stack exchange,提问作者Element scan
相关产品推荐
相关产品推荐

