哈喽,大家好,这里是 Alex。
在企业级应用中,工作流几乎无处不在,从订单审批、任务调度到复杂的业务编排,如果每个流程都靠硬编码实现,不仅维护成本高,也缺乏灵活性。
今天给大家推荐一个在 .NET 生态中非常值得关注的开源项目 —— Elsa Workflows,它可以帮助我们用更优雅、更可视化的方式搭建工作流系统。
项目介绍
Elsa 是一个强大的 .NET 工作流库,目标是让工作流能力可以无缝嵌入到任何 .NET 应用中。无论你是在开发 Web API、后台服务,还是复杂的业务系统,都可以通过 Elsa 来定义、执行和管理工作流。
它最大的特点在于灵活:既支持用 C# 编写工作流,也支持使用可视化设计器,甚至可以通过 JSON 来描述流程。
同时,Elsa 官方还提供了 Elsa Studio,一个基于 Blazor 的可视化管理和设计界面,大大降低了业务人员和开发者之间的沟通成本。
功能特性
从功能层面来看,Elsa 覆盖了一个成熟工作流引擎应有的大部分能力。
它支持短流程和长流程的执行,适合即时任务,也适合跨天、跨周的业务流程。内部设计参考了 Windows Workflow Foundation,但更加现代化,适配 .NET 6 及之后的版本。
在执行模型上,Elsa 内置并行执行能力,并通过 Actor 模型提升吞吐量,非常适合高并发场景。
在扩展性方面,Elsa 提供了大量内置活动,比如发送邮件、HTTP 调用、定时任务、消息收发等,同时也支持自定义活动。
在表达式能力上,除了 C#,还支持 JavaScript、Python 以及 Liquid 模板,方便在流程中动态处理数据。
数据持久化并不绑定具体实现,EF Core、MongoDB、Dapper 都是开箱即用,这一点对架构选型非常友好。
如何使用
如果你只是想快速体验 Elsa,官方提供了 Docker 镜像,可以一次性启动 Elsa Server 和 Elsa Studio。
拉取并运行容器后,通过浏览器即可访问可视化设计器,非常适合本地试用和学习。默认会提供一个管理员账号,登录后就能直接创建和管理工作流。
在容器环境下,Elsa 还贴心地处理了 TLS 和证书问题,默认内置了系统 CA 证书。如果你在公司内网,需要信任私有 CA,只需要通过挂载证书并配置环境变量即可完成,非常适合企业环境。
在代码层面,Elsa 允许你直接用 C# 定义工作流。例如下面这个示例,通过 HTTP 接口触发流程并发送一封邮件:
publicclassSendEmailWorkflow : WorkflowBase { protectedoverridevoidBuild(IWorkflowBuilder builder) { builder.Root = new Sequence { Activities = { new HttpEndpoint { Path = new("/send-email"), SupportedMethods = new(new[] { HttpMethods.Post }), CanStartWorkflow = true }, new SendEmail { From = new("alic@acme.com"), To = new(new[]{ "bob@acme.com" }), Subject = new("Your workflow has been triggered!"), Body = new("Hello!") } } }; } }如果你不想写代码,也可以直接在 Elsa Studio 中,通过拖拽方式设计流程。目前设计器主要支持 Flowchart 类型的活动,Sequence 和 StateMachine 也在官方规划中。
总结
Elsa Workflows 是一个非常有潜力的 .NET 工作流解决方案。它兼顾了代码式开发和可视化设计,既满足开发者的灵活性需求,也照顾到业务侧的可读性和可维护性。
虽然目前在文档完整度、设计器能力上还有一些限制,但从功能广度、架构设计以及社区活跃度来看,Elsa 已经非常适合作为新项目的工作流引擎选择。
如果你正在寻找一个现代化、可扩展的 .NET 工作流框架,不妨花点时间试试 Elsa。