- 后端
- 工作流自动化
- 流程编排
- 低代码
【免费下载链接】elsa-core
The Workflow Engine for .NET
Elsa Core 是一个大型的多项目 .NET 解决方案,采用"小而独立打包的模块"而非单一体架构来组织代码。本文以仓库官方导航文档 repository-map.md 为骨架,逐层拆解其顶层目录、主要模块家族、参考宿主与构建体系,并结合源码给出快速定位代码的实战方法。读完本文,你将能够根据功能需求(如持久化、脚本、多租户、用户任务)迅速找到对应的项目、Feature 类与测试目录,直接进入源码阅读与二次开发。
顶层布局:一条路径对应一类职责
仓库根目录下的src/、test/、doc/、specs/等目录各自承担明确的职责,理解顶层布局是导航的第一步。
| 路径 | 用途 |
|---|---|
| src/apps | 可运行的参考宿主:模块化服务器宿主、负载均衡宿主以及示例包。 |
| src/modules | Elsa 产品模块:工作流引擎、运行时、管理、API、HTTP、身份、持久化、诊断、脚本、调度、租户、标签、弹性等。 |
| src/common | 共享基础设施:Feature/模块装配机制、Mediator、API 辅助类与测试辅助类。 |
| src/clients | 客户端包,目前包含 Elsa API 客户端。 |
| src/extensions | 非核心模块的扩展包,目前包含 Elsa.Testing.Extensions。 |
| test/unit | 针对单个模块或服务的快速单元测试。 |
| test/integration | 在进程内组合多个 Elsa 服务的集成测试。 |
| test/component | 更大型的宿主级与持久化场景测试。 |
| test/performance | 基准与吞吐导向的性能测试。 |
| build | NUKE 构建项目与 CI 构建装配。 |
| doc | ADR、QA 笔记、Agent 日志、赏金文档以及本 Wiki。 |
| specs | Spec Kit 功能规格:计划、任务、契约与快速上手。 |
| design | 公开文档与 README 使用的 Logo、截图和视觉资源。 |
几点源码佐证:
- 构建体系:根目录 Directory.Build.props 定义了全仓共享的 MSBuild 属性(LangVersion latest、Nullable enable、ImplicitUsings enable、MIT 许可、Symbol 包等);src/Directory.Build.props 将源包多目标到
net8.0;net9.0;net10.0;Directory.Packages.props 启用ManagePackageVersionsCentrally集中管理包版本,并对 .NET 8/9 与 .NET 10 分别提供条件版本(例如 FastEndpoints 在 net8/9 下为 7.1.1,net10 下为 8.2.0)。NUKE 构建入口位于 build/Build.cs,build/Build.CI.GitHubActions.cs 负责 CI 装配。 - 测试分层:
test/unit下有 40 余个单元测试项目(如Elsa.Workflows.Core.UnitTests、Elsa.Workflows.Runtime.UnitTests),test/integration下有Elsa.Workflows.IntegrationTests、Elsa.Http.IntegrationTests等,test/performance下是Elsa.Workflows.PerformanceTests,与顶层表格一一对应。
核心装配机制:Elsa 基座包
Elsa 是"基座宿主包",对外暴露AddElsa、ElsaFeature以及默认工作流 Feature 装配。
其核心实现位于 Features/ElsaFeature.cs:
[DependsOn(typeof(MediatorFeature))] [DependsOn(typeof(WorkflowsFeature))] [DependsOn(typeof(FlowchartFeature))] [DependsOn(typeof(DefaultWorkflowRuntimeFeature))] [DependsOn(typeof(WorkflowManagementFeature))] public class ElsaFeature : FeatureBase从源码结构看,ElsaFeature通过DependsOn声明依赖链(Mediator → Workflows → Flowchart → 默认运行时 → 工作流管理),并在Configure()中装配默认的执行管线(WithDefaultWorkflowExecutionPipeline/WithDefaultActivityExecutionPipeline),同时自动注册Elsa.Workflows.Core中的活动——唯独显式移除ReadLine,因为"读一行"活动在等待用户输入时容易造成容器挂起,官方选择让使用者显式开启。这就是在Program.cs中调用services.AddElsa(...)后一切默认功能即可用的底层原理。
主要模块家族:一条功能主线对应一组项目
下表是仓库官方的模块家族划分,映射了"业务能力 → 项目 → 职责"的完整链路。
| 家族 | 项目 | 职责 |
|---|---|---|
| 基座宿主包 | Elsa | AddElsa、ElsaFeature、默认工作流 Feature 装配。 |
| 工作流引擎 | Elsa.Workflows.Core | 活动、执行上下文、管线、序列化、变量、书签、图、流程图原语。 |
| 工作流管理 | Elsa.Workflows.Management | 定义、实例、存储、导入/导出、materializer、校验、描述器。 |
| 工作流运行时 | Elsa.Workflows.Runtime 与 Elsa.Workflows.Runtime.Distributed | 分发、触发器、书签队列、运行时日志、后台活动调度、恢复、分布式运行时支持。 |
| 变更(Alterations) | Elsa.Alterations、Elsa.Alterations.Core | 对运行中工作流实例的批量变更:变更计划、作业、分发与内存存储;EF Core 与 vNext 持久化包随核心一并提供。 |
| 工作流 API | Elsa.Workflows.Api 与 Elsa.Api.Common | FastEndpoints 注册、工作流端点、实时工作流更新、API 序列化。 |
| 表达式语言 | Elsa.Expressions、CSharp、JavaScript、Python、Liquid | 表达式求值与各语言专属的活动/描述器。 |
| 传输/活动包 | Elsa.Http、Elsa.Http.Webhooks、Elsa.Scheduling、Elsa.Resilience | HTTP 触发器与调用、出站 Webhook 接收器与活动驱动的 Webhook 源(WebhooksFeature)、调度触发器、弹性策略。 |
| BPMN | Elsa.Bpmn、Elsa.Bpmn.Interchange | BPMN 2.0 流程执行:BpmnProcess作用域活动、工作台账、作用域信号;elsa:XML 互换格式将 BPMN 文档元素绑定到 Elsa 活动。详见 bpmn-workflows.md。 |
| 持久化(EF Core) | Elsa.Persistence.EFCore 及其Elsa.Persistence.EFCore.*提供者包、结构化日志持久化包 | EF Core 存储与提供者专属配置/迁移。 |
| 持久化 vNext | Elsa.Persistence.VNext、Extensions、Runtime、Relational、Sqlite、PostgreSql、SqlServer、MongoDb | 下一代与提供者无关的持久化:模块自有的存储清单、可移植文档/索引存储、Schema 版本化,以及面向关系库与文档库的 physicalization。 |
| 键值存储 | Elsa.KeyValues | 通用键值存储(IKeyValueStore),内置默认内存后端;供其他模块存放临时或跨请求状态。 |
| 缓存 | Elsa.Caching | ICacheManager与IChangeTokenSignaler;提供内存缓存辅助与基于信号的缓存失效,被其他 Elsa 模块内部使用。 |
| 安全与多租户 | Elsa.Identity、Elsa.Tenants、Elsa.Tenants.AspNetCore、Elsa.SasTokens | 用户、应用、角色、API 密钥、租户、租户感知路由、SAS 令牌。 |
| 外部认证 | Elsa.ExternalAuthentication、Elsa.ExternalAuthentication.OpenIdConnect、Elsa.ExternalAuthentication.Secrets 及 EF Core 提供者包(Sqlite/SqlServer/PostgreSql/MySql/Oracle) | 服务端代理的外部身份提供者:Identity Provider 连接、OpenID Connect 适配器、关联身份解析、可配置的未关联身份策略、Elsa 凭据签发与 EF Core 持久化。详见 specs/012-external-authentication/spec.md。 |
| 密钥(Secrets) | Elsa.Secrets、Elsa.Secrets.Persistence.EFCore、Elsa.Secrets.Persistence.VNext、Elsa.Secrets.JavaScript | 命名密钥与可插拔存储、可扩展密钥类型(文本、RSA 密钥、X.509 证书)、版本化、轮换、吊销、密钥解析器、管理端点、EF Core 与 vNext 持久化、JavaScript 表达式访问。 |
| 诊断 | Elsa.Diagnostics.StructuredLogs、Relational、Sqlite、Elsa.Diagnostics.ConsoleLogs、Elsa.Diagnostics.OpenTelemetry | 结构化ILogger捕获、原始控制台捕获、实时推送、REST/SignalR 端点、内存与 SQLite 存储;OTLP 摄取后端含 trace/metric/log 存储、查询 API 与实时流。 |
| 用户任务 | Elsa.UserTasks、Elsa.UserTasks.Persistence.EFCore.*提供者包、Elsa.UserTasks.Persistence.VNext | 与身份无关的持久化人工任务模块:工作流因人工决策暂停/恢复、安全任务队列、类型化结果、独立于Elsa.Identity的参与者引用。详见 specs/013-user-tasks/spec.md。 |
| Shell 与模块化宿主 | Elsa.Shells.Api 及各模块中的 CShells 面向 Shell 的 Feature 类 | 为模块化宿主提供运行时可配置的 Feature 加载。 |
| 运维看板 | Elsa.Dashboard.Api | Studio 运维看板的只读聚合端点:总览、趋势、需关注发现、近期活动、工作流热点。 |
| 应用集群 | Elsa.Hosting.Management | 应用实例命名、基于心跳的集群成员关系、多节点部署的实例感知托管服务支持。 |
| AI / Weaver | Elsa.AI.Abstractions、Elsa.AI.Copilot、Elsa.AI.Host、Elsa.AI.Persistence.EFCore | Weaver AI 副驾驶:流式聊天、上下文解析、可审阅提案、审计,以及面向 AI 辅助工作流编排的提供者抽象。 |
从源码印证模块家族的组装方式
以运行时家族为例,Elsa.Workflows.Runtime/Features 目录下依次是WorkflowRuntimeFeature(基座运行时)、DefaultWorkflowRuntimeFeature(默认运行时实现)、CachingWorkflowRuntimeFeature(缓存增强)。参考宿主 Program.cs 展示了典型用法:
.UseWorkflowRuntime(runtime => { runtime.UseEntityFrameworkCore(ef => ef.UseSqlite()); runtime.UseCache(); runtime.UseDistributedRuntime(); // 该示例宿主允许在开发环境或显式单宿主开启时使用单机文件系统锁 runtime.DistributedLockingOptions = options => options.AllowLocalLockProviderInDistributedRuntime = allowLocalDistributedRuntimeLockProvider; })同一文件中还串联了UseIdentity、UseWorkflowsApi、UseScheduling、UseBpmnInterchange、UseCSharp/UseJavaScript/UsePython/UseLiquid、UseHttp、UseTenants、可选UseStructuredLogs等调用——这正是"多模块家族被组装进一个宿主"的直观范例。
参考宿主:从样例快速起步
仓库提供了四个可直接运行的参考宿主,用途各有侧重:
- Elsa.Server.Web:最完整的综合 ASP.NET Core 示例。其 Program.cs 展示了典型模块组合:身份、EF Core SQLite、运行时、管理、HTTP、调度、脚本、多租户,以及可选的结构化日志。它还演示了 API 限流(
AddRateLimiter+ 固定窗口策略)、健康检查(/health/live、/health/ready)、CORS 与开发环境 Swagger UI。 - Elsa.ModularServer.Web:通过 Nuplane 与 Shell Feature 演示模块化包加载(对应
Elsa.Shells.Api家族)。 - Elsa.Server.LoadBalancer:负载均衡宿主,可与
Elsa.Hosting.Management的心跳集群能力配合理解多节点部署。 - Elsa.SamplePackage:极简的"包式 Feature"样例,适合学习如何把一个功能封装成可分发模块。
构建与打包文件:三个关键 MSBuild 入口
- Directory.Build.props:全仓共享 MSBuild 设置(语言版本、Nullable、隐式 using、MIT 许可、文档生成、SourceLink 符号包等)。
- src/Directory.Build.props:源包多目标到
net8.0;net9.0;net10.0,并引入 src/Fody.props 的 Fody 装配。 - Directory.Packages.props:集中管理包版本,
ManagePackageVersionsCentrally开启;注意其"条件版本"策略——net8.0/net9.0与net10.0使用不同的依赖版本组,这是理解"同一仓库多目标兼容"的关键。
NUKE 构建目标定义在 build/Build.cs,CI 相关装配见 build/Build.CI.GitHubActions.cs。此外 docker 目录提供了ElsaServer.Dockerfile、ElsaServerAndStudio.Dockerfile、ElsaStudio.Dockerfile及 docker-compose.yml(含 Kafka、Datadog+OTel Collector 变体),可用于本地快速起服务。
快速定位代码:Feature 优先,契约随后
官方导航给出的核心搜索策略是:先找 Feature 类,再沿契约与服务注册追踪到实现。绝大多数模块都有Features/*Feature.cs,且常伴有平行的ShellFeatures/*Feature.cs;Feature 类会告诉你该模块注册了什么、依赖了哪些其他 Feature。
推荐的四个起步搜索命令:
# 1. 找出所有模块与共享基础设施中的 Feature 类 rg "class .*Feature" src/modules src/common # 2. 找出所有 Store 契约(持久化入口) rg "interface I.*Store" src/modules # 3. 查看运行时模块注册了哪些服务生命周期 rg "AddScoped|AddSingleton|TryAdd" src/modules/Elsa.Workflows.Runtime/Features # 4. 查看工作流 API 暴露了哪些 REST 端点 rg "Get\(|Post\(|Delete\(" src/modules/Elsa.Workflows.Api/Endpoints以第一条为例,直接执行即可看到ElsaFeature、WorkflowsFeature、FlowchartFeature、WorkflowManagementFeature、WorkflowRuntimeFeature等一条完整的 Feature 链;第三条会定位到 DefaultWorkflowRuntimeFeature.cs 中的AddScoped/TryAdd服务注册,帮助你理解"触发器、书签、运行日志"等组件在容器中的生命周期。
结语
这份仓库地图的价值在于把 200+ 个 .NET 项目按"能力家族"组织成一张可导航的拓扑:先看顶层目录定大方向,再看模块家族定具体项目,进 Feature 类看装配,沿契约追实现,最后用参考宿主与测试目录验证行为。无论你要调研持久化 vNext、接入外部认证、扩展表达式语言,还是为工作流引擎增加新活动,都可以从本文的路径索引出发,直达源码深处。
- 后端
- 工作流自动化
- 流程编排
- 低代码
【免费下载链接】elsa-core
The Workflow Engine for .NET
相关推荐
Elsa Core 仓库内 Wiki:一份代码锚定的 .NET 工作流引擎地图与导航指南
Elsa Core 仓库内 Wiki:一份代码锚定的 .NET 工作流引擎地图与导航指南 Elsa Core 是一个模块化的 .NET 工作流引擎,源码规模庞大
后端工作流自动化流程编排低代码open-vm-tools 与 VMware Tools 对比分析:开源与商业版的5大差异
open vm tools 与 VMware Tools 对比分析:开源与商业版的5大差异 open vm tools 是一套服务和模块,能在 VMware 产
虚拟化运维后端Elsa Workflow Core 终极指南:快速掌握.NET工作流引擎
Elsa Workflow Core 终极指南:快速掌握.NET工作流引擎 想要在.NET项目中实现强大的工作流功能?Elsa Workflow Core正是你
后端工作流自动化流程编排低代码
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考