روابط لدوال دائمة (دوال Azure)

يقدم الملحق الدوال الدائمة ثلاثة روابط للمشغلات التي تتحكم في تنفيذ دوال التزامن والكيان والنشاط. يقدم ربط بيانات الإخراج الذي يعمل كعميل لوقت تشغيل الدوال.

تأكد من اختيار لغة تطوير Durable Functions في أعلى المقالة.

هام

تدعم هذه المقالة كلا من نماذج برمجة Python v1 وPython v2 ل Durable Functions.

نموذج برمجة Python v2

يتم دعم Durable Functions في نموذج برمجة Python v2 الجديد. لاستخدام نموذج v2، يجب تثبيت Durable Functions SDK، وهي حزمة azure-functions-durablePyPI أو الإصدار 1.2.2 أو إصدار أحدث. يجب عليك أيضا التحقق host.json للتأكد من أن تطبيقك يشير إلى حزم الملحقات الإصدار 4.x لاستخدام نموذج v2 مع Durable Functions.

يمكنك تقديم ملاحظات واقتراحات في Durable Functions SDK ل Python repo.

تشغيل التزامن

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

عند تأليف الدوال فيMicrosoft .NET يتم تكوين مشغل التزامن باستخدام السمة OrchestrationTriggerAttribute Microsoft .NET.

بالنسبة إلى Java، @DurableOrchestrationTrigger يتم استخدام التعليق التوضيحي لتكوين مشغل التنسيق.

عند كتابة دالات المنسق، يتم تعريف مشغل التنسيق بواسطة كائن JSON التالي في bindings صفيف ملف function.json :

{
    "name": "<Name of input parameter in function signature>",
    "orchestration": "<Optional - name of the orchestration>",
    "type": "orchestrationTrigger",
    "direction": "in"
}
  • orchestration هو اسم التزامن الذي يجب أن يستخدمه العملاء عندما يريدون بدء تشغيل مثيلات جديدة من دالة التزامن. هذه الخاصية اختيارية. إذا لم يتم تحديدها، فسيتم استخدام اسم الدالة.

تدعم Azure Functions نموذجي برمجة ل Python. تعتمد الطريقة التي تحدد بها مشغل التزامن على نموذج البرمجة الذي اخترته.

يتيح لك نموذج برمجة Python v2 تحديد مشغل تنسيق باستخدام orchestration_trigger مصمم الديكور مباشرة في التعليمات البرمجية لدالة Python.

في نموذج v2، يتم الوصول إلى مشغلات Durable Functions والروابط من مثيل DFApp، وهو فئة فرعية من FunctionApp التي تقوم بالإضافة إلى ذلك بتصدير مزخرفات Durable Functions الخاصة.

داخليًّا، هذا المشغل يربط استطلاعات مخزن دائم لتكوين أحداث التزامن الجديدة، مثل أحداث بدء التزامن، أحداث انتهاء صلاحية جهاز ضبط الوقت الدائم، أحداث استجابة دالة النشاط، والأحداث الخارجية التي رفعتها وظائف أخرى.

السلوك الخاص بالمشغل

فيما بعد بعض الملاحظات حول مشغل التزامن:

  • مؤشر ترابط واحد- يتم استخدام مؤشر ترابط مرسل واحد لتنفيذ دالة التزامن كافة على مثيل مضيف واحد. لهذا السبب، من المهم التأكد من أن رمز دالة التزامن فعالة ولا يتم تنفيذ أي I/O. من المهم أيضًا التأكد من أن مؤشر الترابط لا يقوم بأي عمل غير متزامن إلا عند انتظار أنواع مهام محددة "دوال دائمة".
  • معالجة رسالة غير قابلة للمعالجة- لا يوجد دعم رسالة غير قابلة للمعالجة في مشغلات التزامن.
  • رؤية الرسالة- يتم إلغاء حذف رسائل مشغل التزامن والاحتفاظ بها غير مرئية لمدة قابلة للتكوين. تجدد رؤية هذه الرسائل تلقائيًّا طالما أن تطبيق الدالة يعمل بشكل صحيح.
  • القيمة المرجعة- يتم تسلسل القيم المرجعة إلى JSON واستمرت إلى جدول محفوظات التزامن في تخزين جدول Azure. يمكن الاستعلام عن القيمة المرجعة بواسطة ربط عميل التزامن، الموضح لاحقًا.

تحذير

يجب ألا تستخدم دوال التزامن أي ارتباطات الإدخال أو الإخراج غير ربط مشغل التزامن. القيام بذلك لديه إمكانية تسبب مشاكل مع ملحق "مهمة دائمة" لأن هذه الارتباطات قد لا تطيع قواعد الترابط الأحادي وI/O. إذا كنت ترغب في استخدام روابط أخرى، قم بإضافتها إلى دالة نشاط تسمى من الدالة orchestrator. للحصول على مزيدٍ من المعلومات حول قيود الأكواد ودالات التزامن، راجعقيود أكواد دالة التزامنالوثائق.

تحذير

يجب عدم الإعلان asyncعن دالات المنسق مطلقا .

الاستخدام الخاص بالمشغل

يدعم ترابط مشغل التزامن كلًّا من المدخلات والمخرجات. فيما بعد بعض الأشياء التي يجب معرفتها حول معالجة المدخلات والإخراج:

  • المدخلات- يمكن استدعاء مشغلات التزامن مع المدخلات، والتي يتم الوصول إليها من خلال عنصر مدخلات السياق. يجب أن تكون كافة وسائل مدخلات JavaScript Object Notation.
  • المخرجات- يدعم تزامن المشغلات قيم الإخراج وكذلك المدخلات. يتم استخدام قيمة إرجاع الدالة لتعيين قيمة الإخراج ويجب أن تكون JSON-serializable.

العينة الخاصة بالمشغل

توضح التعليمات البرمجية للمثال التالي ما قد تبدو عليه أبسط دالة التزامن "مرحبًا بالعالم". لاحظ أن هذا المنسق المثال لا يقوم بجدولة أي مهام بالفعل.

تعتمد السمة المحددة المستخدمة لتعريف المشغل على ما إذا كنت تقوم بتشغيل وظائف C# قيد المعالجة أو في عملية عامل معزولة.

[FunctionName("HelloWorld")]
public static string Run([OrchestrationTrigger] IDurableOrchestrationContext context)
{
    string name = context.GetInput<string>();
    return $"Hello {name}!";
}

إشعار

تخصص التعليمات البرمجية السابقة للدوال الدائمة 2.x. بالنسبة إلى Durable Functions 1.x، يتعين عليك استخدام DurableOrchestrationContext بدلاً من IDurableOrchestrationContext. للحصول على مزيدٍ من المعلومات حول الاختلافات بين الإصدارات، راجع إصدارات الدوال دائمةالمقالة.

const df = require("durable-functions");

module.exports = df.orchestrator(function*(context) {
    const name = context.df.getInput();
    return `Hello ${name}!`;
});

إشعار

durable-functionsتهتم المكتبة باستدعاء الطريقة المتزامنةcontext.done عند خروج وظيفة المُنشئ.

import azure.functions as func
import azure.durable_functions as df

myApp = df.DFApp(http_auth_level=func.AuthLevel.ANONYMOUS)

@myApp.orchestration_trigger(context_name="context")
def my_orchestrator(context):
    result = yield context.call_activity("Hello", "Tokyo")
    return result
param($Context)

$InputData = $Context.Input
$InputData
@FunctionName("HelloWorldOrchestration")
public String helloWorldOrchestration(
        @DurableOrchestrationTrigger(name = "ctx") TaskOrchestrationContext ctx) {
    return String.format("Hello %s!", ctx.getInput(String.class));
}

معظم دوال التزامن تعتبر استدعاء لدوال النشاط، حتى هنا هو مثال "مرحبًا بالعالم" الذي يوضح كيفية استدعاء دالة النشاط:

[FunctionName("HelloWorld")]
public static async Task<string> Run(
    [OrchestrationTrigger] IDurableOrchestrationContext context)
{
    string name = context.GetInput<string>();
    string result = await context.CallActivityAsync<string>("SayHello", name);
    return result;
}

إشعار

تخصص التعليمات البرمجية السابقة للدوال الدائمة 2.x. بالنسبة إلى Durable Functions 1.x، يتعين عليك استخدام DurableOrchestrationContext بدلاً من IDurableOrchestrationContext. لمزيدٍ من المعلومات حول الاختلافات بين الإصدارات، راجع مقالة إصدارات Durable Functions.

const df = require("durable-functions");

module.exports = df.orchestrator(function*(context) {
    const name = context.df.getInput();
    const result = yield context.df.callActivity("SayHello", name);
    return result;
});
@FunctionName("HelloWorld")
public String helloWorldOrchestration(
        @DurableOrchestrationTrigger(name = "ctx") TaskOrchestrationContext ctx) {
    String input = ctx.getInput(String.class);
    String result = ctx.callActivity("SayHello", input, String.class).await();
    return result;
}

المشغل الخاص بالنشاط

مشغل النشاط يمكنك من تأليف الدالات التي يتم استدعاؤها بواسطة دالات التزامن، والمعروفة باسم وظائف النشاط.

يتم تكوين مشغل النشاط باستخدام السمة ActivityTriggerAttribute .NET.

يتم تكوين مشغل النشاط باستخدام التعليق التوضيحي @DurableActivityTrigger .

يتم تعريف مشغل النشاط بواسطة كائن JSON التالي في bindings صفيف function.json:

{
    "name": "<Name of input parameter in function signature>",
    "activity": "<Optional - name of the activity>",
    "type": "activityTrigger",
    "direction": "in"
}
  • activity اسم النشاط. القيمة هي الاسم الذي تستخدمه الدالات orchestrator لاستدعاء الدالة نشاط. هذه الخاصية اختيارية. إذا لم يتم تحديدها، فسيتم استخدام اسم الدالة.

تعتمد الطريقة التي تحدد بها مشغل النشاط على نموذج البرمجة الذي اخترته.

activity_trigger استخدام مصمم الديكور مباشرة في التعليمات البرمجية لدالة Python.

داخليًّا، يقوم ربط المشغل باستطلاعات رأي المخزن المتين المكون لأحداث تنفيذ النشاط الجديد.

السلوك الخاص بالمشغل

فيما يلي بعض الملاحظات حول مشغل النشاط:

  • مؤشر الترابط- بعكس مشغل التزامن، مشغلات النشاط لا تحتوي على أي قيود حول الترابط أو I/O. يمكن التعامل معها مثل وظائف منتظمة.
  • معالجة رسالة غير قابلة للمعالجة- لا يوجد دعم للرسالة غير قابلة للمعالجة في مشغلات التزامن.
  • رؤية الرسالة- يلغي حذف رسائل مشغل التزامن والاحتفاظ بها غير مرئية لمدة قابلة للتكوين. تجدد رؤية هذه الرسائل تلقائيًّا طالما أن تطبيق الدالة يعمل بشكل صحيح.
  • القيمة المرجعة - يتم تسلسل القيمة المرجعة إلى JSON واستمرت إلى مخزن دائم مكون.

الاستخدام الخاص بالمشغل

يدعم ربط مشغل النشاط كلًّا من المدخلات والمخرجات، تمامًا مثل مشغل التزامن. فيما بعد بعض الأشياء التي يجب معرفتها حول معالجة المدخلات والإخراج:

  • المدخلات - يمكنك استدعاء مشغلات النشاط مع مدخلات من دالة التزامن. يجب أن تكون كافة وسائل مدخلات JavaScript Object Notation.
  • المخرجات- تدعم وظائف النشاط قيم المخرجات وكذلك المدخلات. يتم استخدام قيمة إرجاع الدالة لتعيين قيمة الإخراج ويجب أن تكون JSON-serializable.
  • بيانات التعريف-.Microsoft .NET يمكن ربط نشاط الدالات string instanceIdمعلمة للحصول على معرف مثيل تزامن الاستدعاء.

العينة الخاصة بالمشغل

يوضح المثال التالي التعليمات البرمجية كيف قد تبدو وظيفة نشاط بسيطة SayHello .

[FunctionName("SayHello")]
public static string SayHello([ActivityTrigger] IDurableActivityContext helloContext)
{
    string name = helloContext.GetInput<string>();
    return $"Hello {name}!";
}

نوع المعلمة الافتراضية لربط Microsoft .NETActivityTriggerAttributeالربطIDurableActivityContext(أوسياق دائم النشاط لدالات دائمة v1). ومع ذلك، مشغلات نشاطMicrosoft .NET تدعم أيضا الربط مباشرة إلى أنواع تسلسل JSON (بما في ذلك الأنواع الأولية)، بحيث يمكن تبسيط نفس الدالة كما يلي:

[FunctionName("SayHello")]
public static string SayHello([ActivityTrigger] string name)
{
    return $"Hello {name}!";
}
module.exports = async function(context) {
    return `Hello ${context.bindings.name}!`;
};

يمكن أيضا تمرير ارتباطات JavaScript كمعلمات إضافية، لذلك يمكن تبسيط نفس الوظيفة على النحو التالي:

module.exports = async function(context, name) {
    return `Hello ${name}!`;
};
import azure.functions as func
import azure.durable_functions as df

myApp = df.DFApp(http_auth_level=func.AuthLevel.ANONYMOUS)

@myApp.activity_trigger(input_name="myInput")
def my_activity(myInput: str):
    return "Hello " + myInput
param($name)

"Hello $name!"
@FunctionName("SayHello")
public String sayHello(@DurableActivityTrigger(name = "name") String name) {
    return String.format("Hello %s!", name);
}

إضافة روابط بيانات الإدخال/الإخراج

يمكنك استخدام روابط بيانات الإدخال والإخراج العادية بالإضافة إلى ربط مشغل النشاط.

على سبيل المثال، يمكنك أخذ الإدخال إلى ربط النشاط الخاص بك، وإرسال رسالة إلى Event Hub باستخدام ربط إخراج مراكز الأحداث:

{
  "bindings": [
    {
      "name": "message",
      "type": "activityTrigger",
      "direction": "in"
    },
    {
      "type": "eventHub",
      "name": "outputEventHubMessage",
      "connection": "EventhubConnectionSetting",
      "eventHubName": "eh_messages",
      "direction": "out"
  }
  ]
}
module.exports = async function (context) {
    context.bindings.outputEventHubMessage = context.bindings.message;
};

كمبيوتر عميل التزامن

ربط عميل التزامن يمكنك من كتابة الدوال التي تتفاعل مع دوال التزامن. غالبًا ما يشار إلى هذه الدوال على أنهادوال العميل. على سبيل المثال، يمكنك العمل على مثيل التزامن بالطرق التالية:

  • ابدأ بهم.
  • يستعلم عن حالتها.
  • إنهاؤهم.
  • ترسل الأحداث إليهم أثناء تشغيلها.
  • إزالة مثيل التاريخ.

يمكنك الربط بعميل التزامن باستخدام السمة DurableClientAttribute (OrchestrationClientAttribute في Durable Functions v1.x).

يمكنك الربط بعميل التنسيق باستخدام التعليق التوضيحي @DurableClientInput .

يتم تعريف مشغل العميل الدائم بواسطة كائن JSON التالي في bindings صفيف function.json:

{
    "name": "<Name of input parameter in function signature>",
    "taskHub": "<Optional - name of the task hub>",
    "connectionName": "<Optional - name of the connection string app setting>",
    "type": "orchestrationClient",
    "direction": "in"
}
  • taskHub- تُستخدم في السيناريوهات التي تشترك فيها تطبيقات متعددة الوظائف في نفس حساب التخزين ولكن يلزم عزلها عن بعضها البعض. إذا لم يتم تحديدها،host.jsonيتم استخدام القيمة الافتراضية. يجب أن تتطابق هذه القيمة مع القيمة المستخدمة من قبل دوال تزامن الهدف.
  • connectionName - اسم إعداد التطبيق هو الذي يحتوي على سلسلة اتصال حساب موقع التخزين. يجب أن يكون حساب التخزين الممثل بواسطة سلسلة الاتصال هو نفس الحساب المستخدم من قبل دالات تزامن الهدف. إذا لم يتم تحديدها، يتم استخدام سلسلة اتصال حساب التخزين الافتراضي لتطبيق الدالة.

إشعار

في معظم الحالات، يوصي بحذف هذه الخصائص والاعتماد على السلوك الافتراضي.

تعتمد الطريقة التي تحدد بها مشغل عميل دائم على نموذج البرمجة الذي اخترته.

durable_client_input استخدام مصمم الديكور مباشرة في التعليمات البرمجية لدالة Python.

الاستخدام الخاص بالعميل

عادة ما ترتبط ب IDurableClient (DurableOrchestrationClient في Durable Functions v1.x)، والذي يمنحك حق الوصول الكامل إلى جميع واجهات برمجة التطبيقات لعميل التنسيق التي تدعمها Durable Functions.

عادة ما تقوم بالربط بالفئة DurableClientContext .

يجب استخدام SDK الخاصة باللغة للوصول إلى كائن عميل.

إليك مثال دالة قائمة الانتظار التي يتم تشغيلها لكي تبدأ التزامن "HelloWorld".

[FunctionName("QueueStart")]
public static Task Run(
    [QueueTrigger("durable-function-trigger")] string input,
    [DurableClient] IDurableOrchestrationClient starter)
{
    // Orchestration input comes from the queue message content.
    return starter.StartNewAsync<string>("HelloWorld", input);
}

إشعار

يخصص رمز C# السابق للدوال الدائمة 2.x. للحصول على دوال دائمة 1.x، يستخدمOrchestrationClientالسمة بدلًا منDurableClientالسمة، ويجب استخدامDurableOrchestrationClientنوع المعلمة بدلًا منIDurableOrchestrationClient. للحصول على مزيدٍ من المعلومات حول الاختلافات بين الإصدارات، راجع إصدارات الدوال دائمةالمقالة.

function.json

{
  "bindings": [
    {
      "name": "input",
      "type": "queueTrigger",
      "queueName": "durable-function-trigger",
      "direction": "in"
    },
    {
      "name": "starter",
      "type": "durableClient",
      "direction": "in"
    }
  ]
}

index.js

const df = require("durable-functions");

module.exports = async function (context) {
    const client = df.getClient(context);
    return instanceId = await client.startNew("HelloWorld", undefined, context.bindings.input);
};

run.ps1

param([string] $input, $TriggerMetadata)

$InstanceId = Start-DurableOrchestration -FunctionName $FunctionName -Input $input
import azure.functions as func
import azure.durable_functions as df

myApp = df.DFApp(http_auth_level=func.AuthLevel.ANONYMOUS)

@myApp.route(route="orchestrators/{functionName}")
@myApp.durable_client_input(client_name="client")
async def durable_trigger(req: func.HttpRequest, client):
    function_name = req.route_params.get('functionName')
    instance_id = await client.start_new(function_name)
    response = client.create_check_status_response(req, instance_id)
    return response

function.json

{
  "bindings": [
    {
      "name": "input",
      "type": "queueTrigger",
      "queueName": "durable-function-trigger",
      "direction": "in"
    },
    {
      "name": "starter",
      "type": "durableClient",
      "direction": "in"
    }
  ]
}

run.ps1

param([string]$InputData, $TriggerMetadata)

$InstanceId = Start-DurableOrchestration -FunctionName 'HelloWorld' -Input $InputData
@FunctionName("QueueStart")
public void queueStart(
        @QueueTrigger(name = "input", queueName = "durable-function-trigger", connection = "Storage") String input,
        @DurableClientInput(name = "durableContext") DurableClientContext durableContext) {
    // Orchestration input comes from the queue message content.
    durableContext.getClient().scheduleNewOrchestrationInstance("HelloWorld", input);
}

يمكنك العثور على مزيد من التفاصيل حول مثيلات البدء فيإدارة المثيل.

المشغل الخاص بالكيان

تتيح لك مشغلات الوحدة تأليفوظائف الوحدة. يدعم هذا المشغل معالجة الأحداث لمثيل وحدة معينة.

إشعار

تتوفر مشغلات الوحدة بدءًا من الدوال المتينة 2.x.

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

يتم تكوين مشغل الكيان باستخدام سمة EntityTriggerAttribute .NET.

يتم تعريف مشغل الكيان بواسطة كائن JSON التالي في bindings صفيف function.json:

{
    "name": "<Name of input parameter in function signature>",
    "entityName": "<Optional - name of the entity>",
    "type": "entityTrigger",
    "direction": "in"
}

بشكل افتراضي، اسم الوحدة هو اسم الدالة.

إشعار

مشغلات الكيان غير مدعومة بعد ل Java.

تعتمد الطريقة التي تحدد بها مشغل الكيان على نموذج البرمجة الذي اخترته.

entity_trigger استخدام مصمم الديكور مباشرة في التعليمات البرمجية لدالة Python.

السلوك الخاص بالمشغل

فيما يلي بعض الملاحظات حول مشغل الوحدة:

  • مؤشر ترابط واحد:يتم استخدام مؤشر ترابط المرسل الواحد لمعالجة العمليات لوحدة معينة. إذا تم إرسال رسائل متعددة إلى وحدة واحدة في وقت واحد، ستتم معالجة العمليات مرة واحدة في كل مرة.
  • معالجة الرسالة غير القابلة للمعالجة- لا يوجد دعم للرسالة غير القابلة للمعالجة في مشغلات التزامن.
  • رؤية الرسالة- إلغاء حذف رسائل مشغل التزامن والاحتفاظ بها غير مرئية لمدة قابلة للتكوين. تجدد رؤية هذه الرسائل تلقائيًّا طالما أن تطبيق الدالة يعمل بشكل صحيح.
  • القيمة المرجعة- لا تدعم وظائف الوحدة القيمة المرجعة. هناك API معينة يمكن استخدامها لحفظ الحالة أو تمرير القيم مرة أخرى إلى التزامن.

يتم استمرار أية تغييرات في حالة إجراء كيان أثناء تنفيذه تلقائيًّا بعد اكتمال التنفيذ.

لمزيد من المعلومات والأمثلة حول التفاعل مع الوحدات كعميل، راجع الوحدات الدائمة الوثائق.

وحدة كمبيوتر عميل

يمكّنك ربط عميل الوحدة بشكل غير متزامن من تشغيل وظائف الوحدة. غالبًا ما يشار إلى هذه الدوال على أنهادالات العميل.

يمكنك الربط بعميل الكيان باستخدام السمة DurableClientAttribute .NET في وظائف مكتبة فئة .NET.

إشعار

[DurableClientAttribute]يمكن أيضًا استخدام الرمزللالتزام بعميل التزامن.

يتم تعريف عميل الكيان بواسطة كائن JSON التالي في bindings صفيف function.json:

{
    "name": "<Name of input parameter in function signature>",
    "taskHub": "<Optional - name of the task hub>",
    "connectionName": "<Optional - name of the connection string app setting>",
    "type": "durableClient",
    "direction": "in"
}
  • taskHub- تُستخدم في السيناريوهات التي تشترك فيها تطبيقات متعددة الوظائف في نفس حساب التخزين ولكن يلزم عزلها عن بعضها البعض. إذا لم يتم تحديدها،host.jsonيتم استخدام القيمة الافتراضية. يجب أن تتطابق هذه القيمة مع القيمة المستخدمة من قبل وظائف وحدة الهدف.
  • connectionName - اسم إعداد التطبيق هو الذي يحتوي على سلسلة اتصال حساب موقع التخزين. يجب أن يكون حساب موقع التخزين الممثل بسلسلة الاتصال هذه هو نفس الحساب المستخدم من قبل وظائف الكيان الهدف. إذا لم يتم تحديدها، يتم استخدام سلسلة اتصال حساب التخزين الافتراضي لتطبيق الدالة.

إشعار

في معظم الحالات، يوصى بحذف الخصائص الاختيارية والاعتماد على السلوك الافتراضي.

تعتمد الطريقة التي تحدد بها عميل الكيان على نموذج البرمجة الذي اخترته.

durable_client_input استخدام مصمم الديكور مباشرة في التعليمات البرمجية لدالة Python.

إشعار

عملاء الكيان غير مدعومين بعد ل Java.

لمزيد من المعلومات والأمثلة حول التفاعل مع الوحدات كعميل، راجع الوحدات الدائمة الوثائق.

إعدادات host.json

إعدادات التكوين لـ الوظائف الدائمة.

إشعار

يتم اعتماد كافة الإصدارات الرئيسية من "وظائف دائمة" على كافة إصدارات وقت تشغيل "وظائف Azure". ومع ذلك، يختلف مخطط تكوين host.json قليلاً اعتمادًا على إصدار وقت تشغيل وظائف Azure وإصدار ملحق الوظائف الدائمة الذي تستخدمه. الأمثلة التالية للاستخدام مع Azure Functions 2.0 و3.0. في كلا المثالين، إذا كنت تستخدم Azure Functions 1.0، فإن الإعدادات المتاحة هي نفسها، ولكن يجب أن ينتقل قسم "durableTask" في host.json إلى جذر تكوين host.json بدلاً من الحقل ضمن "الامتدادات".

{
 "extensions": {
  "durableTask": {
    "hubName": "MyTaskHub",
    "storageProvider": {
      "connectionStringName": "AzureWebJobsStorage",
      "controlQueueBatchSize": 32,
      "controlQueueBufferThreshold": 256,
      "controlQueueVisibilityTimeout": "00:05:00",
      "maxQueuePollingInterval": "00:00:30",
      "partitionCount": 4,
      "trackingStoreConnectionStringName": "TrackingStorage",
      "trackingStoreNamePrefix": "DurableTask",
      "useLegacyPartitionManagement": true,
      "useTablePartitionManagement": false,
      "workItemQueueVisibilityTimeout": "00:05:00",
    },
    "tracing": {
      "traceInputsAndOutputs": false,
      "traceReplayEvents": false,
    },
    "notifications": {
      "eventGrid": {
        "topicEndpoint": "https://topic_name.westus2-1.eventgrid.azure.net/api/events",
        "keySettingName": "EventGridKey",
        "publishRetryCount": 3,
        "publishRetryInterval": "00:00:30",
        "publishEventTypes": [
          "Started",
          "Completed",
          "Failed",
          "Terminated"
        ]
      }
    },
    "maxConcurrentActivityFunctions": 10,
    "maxConcurrentOrchestratorFunctions": 10,
    "extendedSessionsEnabled": false,
    "extendedSessionIdleTimeoutInSeconds": 30,
    "useAppLease": true,
    "useGracefulShutdown": false,
    "maxEntityOperationBatchSize": 50,
    "storeInputsInOrchestrationHistory": false
  }
 }
}

يجب أن تبدأ أسماء مركز المهام بحرف وتتكون من أحرف وأرقام فقط. إذا لم يتم تحديده، فإن اسم مركز المهام الافتراضي لتطبيق الوظائف هو TestHubName. لمزيد من المعلومات، راجع مراكز المهام.

الخاصية Default ‏‏الوصف
hubName TestHubName (DurableFunctionsHub إذا كنت تستخدم Durable Functions 1.x) يمكن استخدام أسماء مركز المهام البديلة لعزل تطبيقات الوظائف الدائمة المتعددة عن بعضها البعض، حتى إذا كانت تستخدم نفس واجهة التخزين الخلفية.
controlQueueBatchSize 32 عدد الرسائل المطلوب سحبها من قائمة انتظار التحكم في المرة الواحدة.
controlQueueBufferThreshold خطة الاستهلاك ل Python: 32
خطة الاستهلاك ل JavaScript وC#: 128
خطة مخصصة/مميزة: 256
عدد رسائل قائمة انتظار التحكم التي يمكن تخزينها مؤقتًا في الذاكرة في كل مرة، وعند هذه النقطة سينتظر المرسل قبل إلغاء ترتيب أي رسائل إضافية.
حساب عدد الأقسام 4 عدد الأقسام لقائمة انتظار التحكم. قد يكون عددًا صحيحًا موجبًا بين 1 و 16.
controlQueueVisibilityTimeout 5 دقائق مهلة الرؤية لرسائل قائمة انتظار التحكم التي تم إلغاء صفها.
workItemQueueVisibilityTimeout 5 دقائق مهلة الرؤية لرسائل قائمة انتظار عنصر العمل التي تم إلغاء صفها.
maxConcurrentActivityFunctions خطة الاستهلاك: 10
خطة مخصصة/مميزة: 10 أضعاف عدد المعالجات على الجهاز الحالي
الحد الأقصى لعدد وظائف النشاط التي يمكن معالجتها بشكل متزامن على مثيل مضيف واحد.
maxConcurrentOrchestratorFunctions خطة الاستهلاك: 5
خطة مخصصة/مميزة: 10 أضعاف عدد المعالجات على الجهاز الحالي
الحد الأقصى لعدد وظائف المنسق التي يمكن معالجتها بشكل متزامن على مثيل مضيف واحد.
maxQueuePollingInterval 30 seconds الحد الأقصى للفاصل الزمني لاستقصاء قائمة انتظار عنصر العمل والتحكم في تنسيق hh:mm:ss. يمكن أن تؤدي القيم الأعلى إلى زمن انتقال أعلى لمعالجة الرسائل. يمكن أن تؤدي القيم المنخفضة إلى تكاليف تخزين أعلى بسبب زيادة عمليات التخزين.
connectionName (2.7.0 والإصدارات الأحدث)
connectionStringName (2.x)
azureStorageConnectionStringName (1.x)
AzureWebJobsStorage اسم إعداد التطبيق أو مجموعة الإعدادات التي تحدد كيفية الاتصال بموارد Azure Storage الأساسية. عند توفير إعداد تطبيق واحد، يجب أن يكون سلسلة اتصال Azure Storage.
trackingStoreConnectionName (2.7.0 والإصدارات الأحدث)
trackingStoreConnectionStringName
اسم إعداد التطبيق أو مجموعة الإعدادات التي تحدد كيفية الاتصال بجداول المحفوظات والمثيلات. عند توفير إعداد تطبيق واحد، يجب أن يكون سلسلة اتصال Azure Storage. إذا لم يتم تحديده، فسيتم استخدام اتصال connectionStringName (Durable 2.x) أو azureStorageConnectionStringName (Durable 1.x).
trackingStoreNamePrefix البادئة المراد استخدامها لجدول "المحفوظات" و"المثيلات" عند تحديد trackingStoreConnectionStringName. إذا لم يتم تعيينها، فإن قيمة البادئة الافتراضية ستكون DurableTask. إذا لم يتم تحديد trackingStoreConnectionStringName، فسيستخدم جدولا "المحفوظات" و"المثيلات" القيمة hubName كبادئة، وسيتم تجاهل أي إعداد لـ trackingStoreNamePrefix.
traceInputsAndOutputs true قيمة تشير إلى ما إذا كان سيتم تتبع مدخلات ومخرجات استدعاءات الوظائف. السلوك الافتراضي عند تتبع أحداث تنفيذ الوظيفة هو تضمين عدد البايتات في المدخلات والمخرجات المتسلسلة لاستدعاءات الوظائف. يوفر هذا السلوك الحد الأدنى من المعلومات حول شكل المدخلات والمخرجات دون تضخيم السجلات أو الكشف عن معلومات حساسة عن غير قصد. يؤدي تعيين هذه الخاصية على القيمة الحقيقية إلى قيام وظيفة تسجيل الدخول الافتراضية بتسجيل محتويات مدخلات ومخرجات الوظيفة بالكامل.
traceReplayEvents true قيمة تشير إلى ما إذا كان سيتم كتابة أحداث إعادة تشغيل التزامن إلى Application Insights.
eventGridTopicEndpoint عنوان URL لنقطة نهاية الموضوع المخصص لشبكة حدث Azure. عند تعيين هذه الخاصية، يتم نشر أحداث إعلام دورة حياة التزامن إلى نقطة النهاية هذه. تدعم هذه الخاصية دقة إعدادات التطبيق.
eventGridKeySettingName اسم إعداد التطبيق الذي يحتوي على المفتاح المستخدم للمصادقة مع موضوع Azure Event Grid المخصص في EventGridTopicEndpoint.
eventGridPublishRetryCount 0 عدد مرات إعادة المحاولة في حالة فشل النشر إلى "موضوع شبكة الحدث".
eventGridPublishRetryInterval 5 دقائق تنشر Event Grid الفاصل الزمني لإعادة المحاولة بتنسيق hh:mm:ss.
eventGridPublishEventTypes قائمة أنواع الأحداث التي سيتم نشرها على Event Grid. إذا لم يتم تحديدها، سيتم نشر جميع أنواع الأحداث. تتضمن القيم المسموح بها Startedو Completedو Failed وTerminated.
useAppLease صحيح عند التعيين على true، ستتطلب التطبيقات الحصول على تأجير blob على مستوى التطبيق قبل معالجة رسائل مركز المهام. لمزيد من المعلومات، راجع وثائق الإصلاح بعد كارثة والتوزيع الجغرافي. متاح بدءاً من v2.3.0.
useLegacyPartitionManagement true عند التعيين على false، يستخدم خوارزمية إدارة القسم التي تقلل من احتمالية تنفيذ وظيفة مكررة عند القياس. متاح بدءاً من v2.3.0.
إدارة قسم استخدامTable true عند التعيين إلى true، يستخدم خوارزمية إدارة القسم المصممة لتقليل تكاليف حسابات Azure Storage V2. متوفر بدءا من الإصدار 2.10.0. هذه الميزة قيد المعاينة حاليا وغير متوافقة بعد مع خطة الاستهلاك.
useGracefulShutdown true (إصدار أولي) قم بتمكين إيقاف التشغيل بأمان لتقليل فرصة فشل عمليات إيقاف تشغيل المضيف في عمليات تنفيذ الوظيفة أثناء العملية.
maxEntityOperationBatchSize(2.6.1) خطة الاستهلاك: 50
خطة مخصصة/مميزة: 5000
الحد الأقصى لعدد عمليات الكيان التي تتم معالجتها على أنها دُفعة. في حالة الضبط على 1، يتم تعطيل التجميع، وتتم معالجة كل رسالة عملية بواسطة استدعاء وظيفة منفصلة.
storeInputsInOrchestrationHistory true عند التعيين إلى true، يخبر Durable Task Framework بحفظ إدخالات النشاط في جدول المحفوظات. يتيح هذا عرض مدخلات دالة النشاط عند الاستعلام عن محفوظات التنسيق.

العديد من هذه الإعدادات لتحسين الأداء. لمزيد من المعلومات، راجع الأداء وتغيير السعة.

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