工作流概述
Dapr 工作流让开发人员能够可靠地编写业务逻辑和集成。由于 Dapr 工作流是有状态的,它们支持长时间运行和容错应用程序,非常适合编排微服务。Dapr 工作流与其他 Dapr 构建块(如服务调用、发布订阅、状态管理和绑定)无缝协作。
Dapr 工作流的耐用性和弹性功能包括:
- 提供内置的工作流运行时以驱动 Dapr 工作流执行。
- 提供用于在代码中编写工作流的 SDK,支持多种编程语言。
- 提供用于管理工作流(启动、查询、暂停/恢复、触发事件、终止、清除)的 HTTP 和 gRPC API。
- 通过工作流组件与其他工作流运行时集成。

Dapr 工作流可以应用于以下场景:
- 涉及库存管理、支付系统和运输服务之间编排的订单处理。
- 协调多个部门和参与者任务的人力资源入职工作流。
- 在全国餐饮连锁店中协调数字菜单更新的推出。
- 涉及基于 API 的分类和存储的图像处理工作流。
功能
工作流和活动
使用 Dapr 工作流,您可以编写活动,然后在工作流中编排这些活动。工作流活动是:
- 工作流中的基本工作单元
- 用于调用其他(Dapr)服务、与状态存储交互以及发布订阅代理。
子工作流
除了活动之外,您还可以编写工作流以调度其他工作流作为子工作流。子工作流具有独立于启动它的父工作流的实例 ID、历史记录和状态,除了终止父工作流会终止由其创建的所有子工作流这一事实。子工作流还支持自动重试策略。
定时器和提醒
与 Dapr actor 相同,您可以为任何时间范围安排类似提醒的持久延迟。
使用 HTTP 调用管理工作流
当您使用工作流代码创建应用程序并使用 Dapr 运行它时,您可以调用驻留在应用程序中的特定工作流。每个单独的工作流可以:
- 通过 POST 请求启动或终止
- 通过 POST 请求触发以传递命名事件
- 通过 POST 请求暂停然后恢复
- 通过 POST 请求从您的状态存储中清除
- 通过 GET 请求查询工作流状态
工作流模式
Dapr 工作流简化了微服务架构中复杂的、有状态的协调需求。以下部分描述了可以从 Dapr 工作流中受益的几种应用程序模式。
了解更多关于不同类型的工作流模式
工作流 SDK
Dapr 工作流 编写 SDK 是特定语言的 SDK,包含用于实现工作流逻辑的类型和函数。工作流逻辑存在于您的应用程序中,并由运行在 Dapr sidecar 中的 Dapr 工作流引擎通过 gRPC 流进行编排。
支持的 SDK
您可以使用以下 SDK 编写工作流。
语言栈 | 包 |
---|---|
Python | dapr-ext-workflow |
JavaScript | DaprWorkflowClient |
.NET | Dapr.Workflow |
Java | io.dapr.workflows |
Go | workflow |
试用工作流
快速入门和教程
想要测试工作流?通过以下快速入门和教程来查看工作流的实际应用:
快速入门/教程 | 描述 |
---|---|
工作流快速入门 | 运行一个包含四个工作流活动的工作流应用程序,查看 Dapr 工作流的实际应用 |
工作流 Python SDK 示例 | 了解如何使用 Python dapr-ext-workflow 包创建和调用 Dapr 工作流。 |
工作流 JavaScript SDK 示例 | 了解如何使用 JavaScript SDK 创建和调用 Dapr 工作流。 |
工作流 .NET SDK 示例 | 了解如何使用 ASP.NET Core web API 创建和调用 Dapr 工作流。 |
工作流 Java SDK 示例 | 了解如何使用 Java io.dapr.workflows 包创建和调用 Dapr 工作流。 |
工作流 Go SDK 示例 | 了解如何使用 Go workflow 包创建和调用 Dapr 工作流。 |
直接在您的应用中开始使用工作流
想要跳过快速入门?没问题。您可以直接在您的应用程序中试用工作流构建块。在Dapr 安装完成后,您可以开始使用工作流,从如何编写工作流开始。
限制
- 状态存储: 由于某些数据库选择的底层限制,通常是 NoSQL 数据库,您可能会遇到存储内部状态的限制。例如,CosmosDB 在单个请求中最多只能有 100 个状态的单操作项限制。
观看演示
下一步
工作流功能和概念 >>相关链接
- 工作流 API 参考
- 试用完整的 SDK 示例:
Feedback
Was this page helpful?
Glad to hear it! Please tell us how we can improve.
Sorry to hear that. Please tell us how we can improve.