نشر وتشغيل مهام سير العمل باستخدام ملحق Dapr لخدمة Azure Kubernetes (AKS)

باستخدام Dapr Workflow، يمكنك بسهولة تنسيق المراسلة وإدارة الحالة ومنطق معالجة الفشل عبر الخدمات المصغرة المختلفة. يمكن أن يساعدك Dapr Workflow على إنشاء تطبيقات طويلة الأمد ومتسامحة مع الأخطاء وحالة.

في هذا الدليل، تستخدم مثال سير عمل معالجة الطلبات المتوفر ل:

  • إنشاء سجل حاويات Azure والمجموعة AKS لهذا النموذج.
  • تثبيت ملحق Dapr على نظام مجموعة AKS.
  • نشر نموذج التطبيق إلى AKS.
  • ابدأ واستعلم عن مثيلات سير العمل باستخدام استدعاءات واجهة برمجة تطبيقات HTTP.

مثال سير العمل هو مشروع ASP.NET Core مع:

  • ملفProgram.cs يحتوي على إعداد التطبيق، بما في ذلك تسجيل سير العمل وأنشطة سير العمل.
  • تعريفات سير العمل الموجودة في Workflows الدليل.
  • تعريفات نشاط سير العمل الموجودة في Activities الدليل.

Prerequisites

إعداد البيئة

استنساخ نموذج المشروع

استنساخ مثال تطبيق سير العمل.

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

تثبيت Dapr على نظام مجموعة AKS

تثبيت ملحق Dapr على نظام مجموعة AKS. قبل أن تبدأ، تأكد أنك:

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 sidecar ونموذج التطبيق:

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}'

يشمل الناتج المتوقع معرف مثيل يتم توليدها تلقائيا:

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}"
}

لاحظ أنه تم وضع علامة على حالة سير العمل كمكتملة.

الخطوة التالية