ملحق Dapr ل Azure Functions

ملحق Dapr ل Azure Functions هو مجموعة من الأدوات والخدمات التي تسمح للمطورين بدمج Azure Functions بسهولة مع النظام الأساسي لوقت تشغيل التطبيق الموزع (Dapr).

Azure Functions هي خدمة حساب مستندة إلى الحدث توفر مجموعة من المشغلات والروابط للاتصال بسهولة بخدمات Azure الأخرى. يوفر Dapr مجموعة من الكتل الإنشائية وأفضل الممارسات لبناء التطبيقات الموزعة، بما في ذلك الخدمات المصغرة وإدارة الحالة والمراسلة pub/sub والمزيد.

مع التكامل بين Dapr و Functions، يمكنك إنشاء وظائف تتفاعل مع الأحداث من Dapr أو الأنظمة الخارجية.

الإجراء الاتجاه نوع
المشغل على ربط إدخال Dapr ‏‫غير متوفر‬ daprBindingTrigger
تشغيل استدعاء خدمة Dapr ‏‫غير متوفر‬ daprServiceInvocationTrigger
المشغل على اشتراك موضوع Dapr ‏‫غير متوفر‬ daprTopicTrigger
سحب حالة Dapr لتنفيذ في daprState
سحب أسرار Dapr لتنفيذ في daprSecret
حفظ قيمة في حالة Dapr صادر daprState
استدعاء تطبيق Dapr آخر صادر daprInvoke
نشر رسالة إلى موضوع Dapr صادر daprPublish
إرسال قيمة إلى ربط إخراج Dapr صادر daprBinding

تثبيت الملحق

تعتمد حزمة NuGet الملحقة التي تقوم بتثبيتها على وضع C# قيد المعالجة أو عملية العامل المعزولة التي تستخدمها في تطبيق الوظائف الخاص بك:

يتوفر هذا الملحق عن طريق تثبيت حزمة NuGet، الإصدار 1.0.0.

استخدام .NET CLI:

dotnet add package Microsoft.Azure.WebJobs.Extensions.Dapr

تثبيت الحزمة

يمكنك إضافة الملحق عن طريق إضافة التعليمات البرمجية التالية أو استبدالها في ملفك host.json :

{
  "version": "2.0",
  "extensionBundle": {
    "id": "Microsoft.Azure.Functions.ExtensionBundle",
    "version": "[4.*, 5.0.0)"
  }
}

تمكين Dapr

يمكنك تكوين Dapr باستخدام مختلف [الوسيطات والتعليقات التوضيحية][dapr-args] استنادا إلى سياق وقت التشغيل. يمكنك تكوين Dapr ل Azure Functions من خلال قناتين:

  • قوالب البنية الأساسية كتعليمية (IaC)، كما هو الحال في قوالب Bicep أو Azure Resource Manager (ARM)
  • مدخل Microsoft Azure

عند استخدام قالب IaC، حدد الوسيطات التالية في properties قسم من تعريف مورد تطبيق الحاوية.

DaprConfig: {
  enabled: true
  appId: '${envResourceNamePrefix}-funcapp'
  appPort: 3001
  httpReadBufferSize: ''
  httpMaxRequestSize: ''
  logLevel: ''
  enableApiLogging: true
}

تعتبر قيم تكوين Dapr أعلاه تغييرات في نطاق التطبيق. عند تشغيل تطبيق حاوية في وضع مراجعة متعددة، لن تؤدي التغييرات التي يتم إجراؤها على هذه الإعدادات إلى إنشاء مراجعة جديدة. بدلا من ذلك، تتم إعادة تشغيل جميع المراجعات الموجودة للتأكد من تكوينها بأحدث القيم.

عند تكوين Dapr باستخدام مدخل Microsoft Azure، انتقل إلى تطبيق الوظائف وحدد Dapr من القائمة اليمنى:

لقطة شاشة توضح مكان العثور على تمكين Dapr لتطبيق الوظائف في مدخل Microsoft Azure.

منافذ Dapr والمستمعين

عند تشغيل دالة من Dapr، يعرض الملحق المنفذ 3001 تلقائيا للاستماع إلى الطلبات الواردة من Dapr sidecar.

هام

يتم عرض المنفذ 3001 والاستماع إليه فقط إذا تم تعريف مشغل Dapr في تطبيق الوظائف. عند استخدام Dapr، ينتظر sidecar لتلقي استجابة من المنفذ المحدد قبل إكمال إنشاء مثيل. لا تقم بتعريف التعليق التوضيحي dapr.io/port أو --app-port ما لم يكن لديك مشغل. قد يؤدي القيام بذلك إلى تأمين التطبيق الخاص بك من Dapr sidecar.

إذا كنت تستخدم روابط الإدخال والإخراج فقط، فلا يلزم كشف المنفذ 3001 أو تعريفه.

بشكل افتراضي، عندما تحاول Azure Functions الاتصال ب Dapr، فإنه يستدعي Dapr عبر المنفذ الذي تم حله من متغير DAPR_HTTP_PORTالبيئة . إذا كان هذا المتغير فارغا، فسيتم تعيينه افتراضيا إلى المنفذ 3500.

يمكنك تجاوز عنوان Dapr المستخدم بواسطة روابط الإدخال والإخراج عن طريق تعيين الخاصية DaprAddress في function.json للربط (أو السمة). بشكل افتراضي، يستخدم http://localhost:{DAPR_HTTP_PORT}.

لا يزال تطبيق الوظائف يعرض منفذا آخر ونقطة نهاية لأشياء مثل مشغلات HTTP، والتي يتم تعيينها افتراضيا محليا إلى 7071، ولكن في الحاوية، يتم تعيينها افتراضيا إلى 80.

أنواع الربط

تعتمد أنواع الربط المعتمدة ل .NET على كل من إصدار الملحق ووضع تنفيذ C#، والتي يمكن أن تكون واحدة مما يلي:

مكتبة الفئات قيد المعالجة عبارة عن دالة C# مجمعة يتم تشغيلها في نفس العملية مثل وقت تشغيل الدالات.

يدعم ملحق Dapr أنواع المعلمات وفقا للجدول أدناه.

Binding أنواع المعلمات
مشغل Dapr daprBindingTrigger
daprServiceInvocationTrigger
daprTopicTrigger
إدخال Dapr daprState
daprSecret
إخراج Dapr daprState
daprInvoke
daprPublish
daprBinding

للحصول على أمثلة باستخدام هذه الأنواع، انظر إلي مستودع GitHub لملحق البرنامج.

جرب ملحق Dapr ل Azure Functions

تعرف على كيفية استخدام ملحق Dapr ل Azure Functions عبر العينات المتوفرة.

العينات ‏‏الوصف
التشغيل السريع ابدأ باستخدام ربط Dapr Pub/sub و HttpTrigger.
Dapr Kafka تعرف على كيفية استخدام ملحق Azure Functions Dapr مع مكون Kafka bindings Dapr.
.NET قيد المعالجة تعرف على كيفية استخدام نموذج Azure Functions قيد المعالجة للتكامل مع مكونات Dapr المتعددة في .NET، مثل استدعاء الخدمة و Pub/sub و Bindings و State Management.
.NET Isolated التكامل مع مكونات Dapr في .NET باستخدام نموذج تنفيذ Azure Functions خارج proc (OOP).

جرب ملحق Dapr ل Azure Functions

تعرف على كيفية استخدام ملحق Dapr ل Azure Functions عبر العينات المتوفرة.

العينات ‏‏الوصف
وظائف Java تعرف على كيفية استخدام ملحق Azure Functions Dapr باستخدام Java.

جرب ملحق Dapr ل Azure Functions

تعرف على كيفية استخدام ملحق Dapr ل Azure Functions عبر العينات المتوفرة.

العينات ‏‏الوصف
التشغيل السريع ابدأ باستخدام ربط Dapr Pub/sub و HttpTrigger.
Dapr Kafka تعرف على كيفية استخدام ملحق Azure Functions Dapr مع مكون Kafka bindings Dapr.
جافا سكريبت تشغيل تطبيق دالة JavaScript Dapr والتكامل مع استدعاء خدمة Dapr و Pub/sub و Bindings و State Management باستخدام Azure Functions.

جرب ملحق Dapr ل Azure Functions

تعرف على كيفية استخدام ملحق Dapr ل Azure Functions عبر العينات المتوفرة.

العينات ‏‏الوصف
وظائف PowerShell تعرف على كيفية استخدام ملحق Azure Functions Dapr مع PowerShell.

جرب ملحق Dapr ل Azure Functions

تعرف على كيفية استخدام ملحق Dapr ل Azure Functions عبر العينات المتوفرة.

العينات ‏‏الوصف
Dapr Kafka تعرف على كيفية استخدام ملحق Azure Functions Dapr مع مكون Kafka bindings Dapr.
Python v1 قم بتشغيل تطبيق Python بحجم Dapr واستخدم نموذج برمجة Azure Functions Python v1 للتكامل مع مكونات Dapr.
Python v2 قم بتشغيل تطبيق Dapr باستخدام نموذج برمجة Azure Functions Python v2 للتكامل مع مكونات Dapr.

استكشاف الأخطاء وإصلاحها

يصف هذا القسم كيفية استكشاف المشكلات التي يمكن أن تحدث عند استخدام ملحق Dapr لوظائف Azure وإصلاحها.

تأكد من تمكين Dapr في بيئتك

إذا كنت تستخدم روابط ومشغلات Dapr في Azure Functions، ولم يتم تمكين Dapr في بيئتك، فقد تتلقى رسالة الخطأ: Dapr sidecar isn't present. Please see (https://aka.ms/azure-functions-dapr-sidecar-missing) for more information. لتمكين Dapr في بيئتك:

  • إذا تم نشر Azure Function في Azure Container Apps، فراجع إرشادات تمكين Dapr لملحق Dapr ل Azure Functions.

  • إذا تم نشر Azure Function في Kubernetes، فتحقق من أن تكوين YAML الخاص بالنشر يحتوي على التعليقات التوضيحية التالية:

    annotations:
      ...
      dapr.io/enabled: "true"
      dapr.io/app-id: "functionapp"
      # You should only set app-port if you are using a Dapr trigger in your code.
      dapr.io/app-port: "<DAPR_APP_PORT>"
      ...
    
  • إذا كنت تقوم بتشغيل Azure Function محليا، فقم بتشغيل الأمر التالي للتأكد من تشغيل تطبيق الوظائف باستخدام Dapr:

    dapr run --app-id functionapp --app-port <DAPR_APP_PORT>  --components-path <COMPONENTS_PATH> -- func host start 
    

التحقق من قيمة منفذ التطبيق في تكوين Dapr

يبدأ ملحق Dapr ل Azure Functions خادم HTTP على المنفذ 3001 بشكل افتراضي. يمكنك تكوين هذا المنفذ باستخدام DAPR_APP_PORT متغير البيئة.

إذا قمت بتوفير قيمة منفذ تطبيق غير صحيحة عند تشغيل تطبيق Azure Functions، فقد تتلقى رسالة الخطأ: The Dapr sidecar is configured to listen on port {portInt}, but the app server is running on port {appPort}. This may cause unexpected behavior. For more information, visit [this link](https://aka.ms/azfunc-dapr-app-config-error). لحل رسالة الخطأ هذه:

  1. في إعدادات Dapr لتطبيق الحاوية:

    • إذا كنت تستخدم مشغل Dapr في التعليمات البرمجية الخاصة بك، فتحقق من تعيين منفذ التطبيق إلى 3001 أو إلى قيمة DAPR_APP_PORT متغير البيئة.

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

  2. تحقق من توفير قيمة منفذ التطبيق الصحيحة في تكوين Dapr.

    • إذا كنت تستخدم Azure Container Apps، فحدد منفذ التطبيق في Bicep:

      DaprConfig: {
         ...
         appPort: <DAPR_APP_PORT>
         ...
      }
      
    • إذا كنت تستخدم بيئة Kubernetes، فقم بتعيين dapr.io/app-port التعليق التوضيحي:

      annotations:
         ...
         dapr.io/app-port: "<DAPR_APP_PORT>"
         ...
      
    • إذا كنت تقوم بالتطوير محليا، فتحقق من تعيين --app-port عند تشغيل تطبيق الوظائف باستخدام Dapr:

      dapr run --app-id functionapp --app-port <DAPR_APP_PORT> --components-path <COMPONENTS_PATH> -- func host start 
      

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

تعرف على المزيد حول Dapr.