你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
使用 Dapr 工作流,可以轻松地跨各种微服务协调消息传送、状态管理和故障处理逻辑。 Dapr 工作流可帮助你创建长时间运行、容错和有状态的应用程序。
本指南使用 提供的订单处理工作流示例 :
- 为此示例创建 Azure 容器注册表和 AKS 群集。
- 在 AKS 群集上安装 Dapr 扩展。
- 将示例应用程序部署到 AKS。
- 使用 HTTP API 调用启动和查询工作流实例。
工作流示例是一个 ASP.NET Core 项目,其中包含:
- 一个
Program.cs文件,包含应用设置,包括工作流和工作流活动的注册。 -
在
Workflows目录中找到的工作流定义。 -
工作流活动定义位于
Activities目录中。
先决条件
- 具有所有者或管理员角色的 Azure 订阅
- Azure Kubernetes 服务基于角色的访问控制管理员角色
- 最新版本的 Azure CLI
- 最新版本的 Dapr
- 最新 Docker
- 最新 Helm
设置环境
克隆示例项目
克隆示例工作流应用程序。
git clone https://github.com/Azure-Samples/dapr-workflows-aks-sample.git
导航到示例的根目录。
cd dapr-workflows-aks-sample
创建 Kubernetes 群集
创建用于保存 AKS 群集的资源组。
az group create --name <your-resource-group> --location eastus
创建 AKS 群集。
az aks create --resource-group <your-resource-group> --name <your-AKS-cluster> --node-count 2 --generate-ssh-keys
确保 kubectl 已安装并指向您的 AKS 集群。 如果使用的是 Azure Cloud Shell,则 kubectl 已安装。
有关详细信息,请参阅部署 AKS 群集教程。
将应用程序部署到 AKS
在 AKS 群集上安装 Dapr
在 AKS 群集上安装 Dapr 扩展。 在开始之前,请确保:
az k8s-extension create --cluster-type managedClusters --cluster-name myAKSCluster --resource-group <your-resource-group> --name dapr --extension-type Microsoft.Dapr
几分钟后,输出将显示 Dapr 与您的 AKS 集群的连接。 接下来,在集群上对 Dapr 进行初始化。
dapr init -k
验证是否已安装 Dapr:
kubectl get pods -A
部署 Redis 执行组件状态存储组件
进入您派生的示例版本中的 Deploy 目录:
cd Deploy
部署 Redis 组件:
helm repo add bitnami https://charts.bitnami.com/bitnami
helm install redis bitnami/redis
kubectl apply -f redis.yaml
运行应用程序
部署 Redis 后,将应用程序部署到 AKS:
kubectl apply -f deployment.yaml
公开 Dapr 挎斗和示例应用:
kubectl apply -f service.yaml
export APP_URL=$(kubectl get svc/workflows-sample -o jsonpath='{.status.loadBalancer.ingress[0].ip}')
export DAPR_URL=$(kubectl get svc/workflows-sample-dapr -o jsonpath='{.status.loadBalancer.ingress[0].ip}')
验证是否已导出上述命令:
echo $APP_URL
echo $DAPR_URL
启动工作流
既然应用程序和 Dapr 已部署到 AKS 群集,你现在可以启动和查询工作流实例。 通过对示例应用进行以下 API 调用,将项重新放入到清单中:
curl -X GET $APP_URL/stock/restock
启动工作流:
curl -i -X POST $DAPR_URL/v1.0/workflows/dapr/OrderProcessingWorkflow/start \
-H "Content-Type: application/json" \
-H "dapr-app-id: dwf-app" \
-d '{"Name": "Paperclips", "TotalCost": 99.95, "Quantity": 1}'
预期输出包括自动生成的实例 ID:
HTTP/1.1 202 Accepted
Content-Type: application/json
Traceparent: 00-00000000000000000000000000000000-0000000000000000-00
Date: Tue, 23 Apr 2024 15:35:00 GMT
Content-Length: 21
{"instanceID":"<generated-id>"}
检查工作流状态:
curl -i -X GET $DAPR_URL/v1.0/workflows/dapr/OrderProcessingWorkflow/<instance-id> \
-H "dapr-app-id: dwf-app"
预期输出:
HTTP/1.1 200 OK
Content-Type: application/json
Traceparent: 00-00000000000000000000000000000000-0000000000000000-00
Date: Tue, 23 Apr 2024 15:51:02 GMT
Content-Length: 580
监视应用程序日志:
kubectl logs -l run=workflows-sample -c workflows-sample --tail=20
预期输出:
{
"instanceID":"1234",
"workflowName":"OrderProcessingWorkflow",
"createdAt":"2024-04-23T15:35:00.156714334Z",
"lastUpdatedAt":"2024-04-23T15:35:00.176459055Z",
"runtimeStatus":"COMPLETED",
"dapr.workflow.input":"{ \"input\" : {\"Name\": \"Paperclips\", \"TotalCost\": 99.95, \"Quantity\": 1}}",
"dapr.workflow.output":"{\"Processed\":true}"
}
请注意,工作流状态标记为已完成。