项目

Elsa 工作流 - 示例工作流演示

ElsaDemoApp 是一个示例应用程序,演示了如何在 ABP 应用程序中使用 Elsa 模块。该演示应用程序包含四个项目:

  • ElsaDemoApp.Server 是一个集成了 Identity 和 Elsa 模块的 ABP 应用程序。它用作身份认证服务器和 Elsa 工作流服务器。
  • ElsaDemoApp.Studio.WASM 是一个带有 Elsa Studio 的 Blazor WebAssembly 应用程序。它用作 Elsa Studio 客户端应用程序。
  • ElsaDemoApp.OrderingElsaDemoApp.Payment 是两个微服务,可用于在分布式系统中测试 Elsa 工作流。

Elsa 模块结构

此示例工作流演示了如何将 ABP 与 Elsa 工作流集成。 关于 Elsa 本身的更多详细信息,请参阅官方 Elsa 文档 及相关指南。

下载

注意: ElsaDemoApp 示例应用程序仅供 ABP 客户 使用。因此,您需要拥有商业许可证才能下载源代码。

运行演示应用程序

ElsaDemoApp.Server 中预定义了一个 Elsa 工作流,该工作流使用 Elsa 工作流创建订单并处理付款,并使用 ABP 分布式事件总线来协调工作流。

以下是完整的代码工作流:

public class OrderWorkflow : WorkflowBase
{
    public const string Name = "OrderWorkflow";

    protected override void Build(IWorkflowBuilder builder)
    {
        builder.WithDefinitionId(Name);
        builder.Root = new Sequence
        {
            Activities =
            {
                // 将发布 NewOrderEto 事件到 Ordering 微服务,Ordering 微服务将创建订单并发布 OrderPlaced 事件
                new CreateOrderActivity(),

                // 等待 OrderPlaced 事件,该事件由 Ordering 微服务触发,Elsa 将使工作流继续到下一个活动
                new OrderPlacedEvent(),

                // 此活动将发布 RequestPaymentEto 事件到 Payment 微服务,Payment 微服务将处理付款并发布 PaymentCompleted 事件
                new RequestPaymentActivity(),

                // 等待 PaymentCompleted 事件,该事件由 Payment 微服务触发,Elsa 将使工作流继续到下一个活动
                new PaymentCompletedEvent(),

                // 此活动将向客户发送电子邮件,通知付款已完成
                new PaymentCompletedActivity()
            }
        };
    }
}

演示应用程序使用 SQL Server LocalDB 作为数据库提供程序,Redis 作为缓存服务器,RabbitMQ 作为消息代理。请确保您的计算机上已安装并运行这些服务,然后按照以下说明运行应用程序。

您可以按照以下步骤运行演示应用程序:

  1. 运行 ElsaDemoApp.Server 项目以迁移数据库(dotnet run --migrate-database)并启动服务器。
  2. 运行 ElsaDemoApp.Studio.WASM 项目以启动 Elsa Studio 客户端应用程序。
  3. 运行 ElsaDemoApp.Ordering 项目以启动 Ordering 微服务。
  4. 运行 ElsaDemoApp.Payment 项目以启动 Payment 微服务。

运行所有应用程序后,您可以登录 ElsaDemoApp.Server 应用程序(使用默认凭据)并导航到 https://localhost:5001/Ordering 页面来创建订单:

创建订单

之后,您可以导航到 ElsaDemoApp.Studio.WASM 应用程序,查看已创建、正在运行和已完成的工作流实例:

工作流实例

在本文档中