Kötések a Durable Functionshez (Azure Functions)

A Durable Functions bővítmény három triggerkötést vezet be, amelyek vezérli a vezénylő, az entitás és a tevékenységfüggvények végrehajtását. Emellett egy kimeneti kötést is bevezet, amely ügyfélként működik a Durable Functions futtatókörnyezetében.

Ügyeljen arra, hogy a cikk tetején válassza ki a Durable Functions fejlesztési nyelvét.

Fontos

Ez a cikk mind a Python 1- és Python v2-programozási modelleket támogatja a Durable Functionshez.

Python v2 programozási modell

A Durable Functions az új Python v2 programozási modellben támogatott. A v2-modell használatához telepítenie kell a Durable Functions SDK-t, amely a PyPI-csomag azure-functions-durable, vagy egy újabb verzió 1.2.2 . Azt is ellenőriznie host.json kell, hogy az alkalmazás hivatkozik-e az Extension Bundles 4.x-es verziójára a v2-es modell tartós függvényekkel való használatához.

A Pythonhoz készült Durable Functions SDK adattárban visszajelzést és javaslatokat küldhet.

Vezénylési eseményindító

A vezénylési trigger lehetővé teszi a tartós vezénylési funkciók készítését. Ez az eseményindító akkor fut, ha egy új vezénylési példány van ütemezve, és amikor egy meglévő vezénylési példány eseményt kap. A vezénylési függvényeket kiváltó események közé tartoznak például a tartós időzítő lejáratai, a tevékenységfüggvények válaszai és a külső ügyfelek által kiváltott események.

Amikor függvényeket ad meg a .NET-ben, a vezénylési eseményindító az OrchestrationTriggerAttribute .NET attribútummal van konfigurálva.

Java esetén a @DurableOrchestrationTrigger jegyzet a vezénylési eseményindító konfigurálására szolgál.

Vezénylőfüggvények írásakor a vezénylési eseményindítót a következő JSON-objektum határozza meg a bindingsfunction.json fájl tömbjében:

{
    "name": "<Name of input parameter in function signature>",
    "orchestration": "<Optional - name of the orchestration>",
    "type": "orchestrationTrigger",
    "direction": "in"
}
  • orchestration annak a vezénylésnek a neve, amelyet az ügyfeleknek használniuk kell, amikor új példányokat szeretnének létrehozni ennek a vezénylőfüggvénynek. Ez a tulajdonság opcionális. Ha nincs megadva, a függvény neve lesz használva.

Az Azure Functions két Python-programozási modellt támogat. A vezénylési trigger definiálásának módja a választott programozási modelltől függ.

A Python v2 programozási modell lehetővé teszi egy vezénylési eseményindító definiálását a orchestration_trigger dekorátor használatával közvetlenül a Python-függvénykódban.

A v2 modellben a Durable Functions eseményindítói és kötései egy példányból DFAppérhetők el, amely a Durable Functions-specifikus dekorátorok exportálásának alosztálya FunctionApp .

Ez az eseményindító-kötés belsőleg lekérdezi a konfigurált tartós tárolót az új vezénylési eseményekhez, például a vezénylési indítási eseményekhez, a tartós időzítő lejárati eseményeihez, a tevékenységfüggvény válaszeseményeihez és más függvények által kiváltott külső eseményekhez.

Eseményindító viselkedése

Íme néhány megjegyzés a vezénylési eseményindítóról:

  • Egyszálas – Egyetlen diszpécserszálat használ az összes vezénylőfüggvény végrehajtásához egyetlen gazdagéppéldányon. Ezért fontos gondoskodni arról, hogy a vezénylő függvénykódja hatékony legyen, és ne végezzen I/O-t. Azt is fontos biztosítani, hogy ez a szál ne végezhessen aszinkron munkát, kivéve, ha a Durable Functions-specifikus feladattípusokra vár.
  • Méregüzenetek kezelése – A vezénylési triggerek nem támogatják a méregüzeneteket.
  • Üzenet láthatósága – A vezénylési eseményindító üzenetei le vannak törölve, és konfigurálható ideig láthatatlanok maradnak. Az üzenetek láthatósága automatikusan megújul, amíg a függvényalkalmazás fut és kifogástalan állapotban van.
  • Visszatérési értékek – A visszatérési értékek JSON-ra szerializálva lesznek, és megmaradnak az Azure Table Storage vezénylési előzménytáblájában. Ezeket a visszatérési értékeket lekérdezheti a vezénylési ügyfélkötés, amelyet később ismertetünk.

Figyelmeztetés

Az Orchestrator függvények soha nem használhatnak bemeneti vagy kimeneti kötéseket a vezénylési trigger kötésétől eltérően. Ezzel problémákat okozhat a Durable Task bővítménysel kapcsolatban, mert előfordulhat, hogy ezek a kötések nem tartják be az egyszálas és az I/O-szabályokat. Ha más kötéseket szeretne használni, vegye fel őket egy, a vezénylő függvényből hívott tevékenységfüggvénybe. A vezénylő függvények kódolási korlátozásairól az Orchestrator függvénykód-korlátozásainak dokumentációjában talál további információt.

Figyelmeztetés

Az orchestrator függvényeket soha nem szabad deklarálni async.

Használat aktiválása

A vezénylési trigger kötése támogatja a bemeneteket és a kimeneteket is. Íme néhány tudnivaló a bemenet és a kimenet kezeléséről:

  • bemenetek – A vezénylési eseményindítók olyan bemenetekkel hívhatók meg, amelyek a környezeti bemeneti objektumon keresztül érhetők el. Minden bemenetnek JSON-szerializálhatónak kell lennie.
  • kimenetek – A vezénylési triggerek támogatják a kimeneti értékeket és a bemeneteket. A függvény visszatérési értéke a kimeneti érték hozzárendelésére szolgál, és JSON-szerializálhatónak kell lennie.

Trigger minta

Az alábbi példakód bemutatja, hogyan nézhet ki a legegyszerűbb ""Helló világ!" alkalmazás" vezénylő függvény. Vegye figyelembe, hogy ez a példa vezénylő valójában nem ütemez semmilyen feladatot.

Az eseményindító definiálásához használt konkrét attribútum attól függ, hogy a C# függvényeket folyamatban vagy izolált feldolgozói folyamatban futtatja-e.

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

Feljegyzés

Az előző kód a Durable Functions 2.x-hez készült. A Durable Functions 1.x esetén a helyett IDurableOrchestrationContexta DurableOrchestrationContext . A verziók közötti különbségekről további információt a Durable Functions-verziók című cikkben talál.

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

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

Feljegyzés

A durable-functions kódtár gondoskodik a szinkron context.done metódus hívásáról, amikor a generátorfüggvény kilép.

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));
}

A legtöbb vezénylő függvény tevékenységfüggvényeket hív meg, ezért íme egy ""Helló világ!" alkalmazás" példa, amely bemutatja, hogyan hívhat meg egy tevékenységfüggvényt:

[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;
}

Feljegyzés

Az előző kód a Durable Functions 2.x-hez készült. A Durable Functions 1.x esetén a helyett IDurableOrchestrationContexta DurableOrchestrationContext . A verziók közötti különbségekről további információt a Durable Functions verzióiról szóló cikkben talál.

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

Tevékenység-eseményindító

A tevékenységindítóval olyan függvényeket hozhat létre, amelyeket a vezénylő függvények, más néven tevékenységfüggvények neveznek.

A tevékenységindító az ActivityTriggerAttribute .NET attribútummal van konfigurálva.

A tevékenységindító a @DurableActivityTrigger széljegyzet használatával van konfigurálva.

A tevékenységindítót a következő JSON-objektum határozza meg a bindings function.json tömbjében:

{
    "name": "<Name of input parameter in function signature>",
    "activity": "<Optional - name of the activity>",
    "type": "activityTrigger",
    "direction": "in"
}
  • activity a tevékenység neve. Ez az érték az a név, amelyet a vezénylő függvények használnak a tevékenységfüggvény meghívásához. Ez a tulajdonság opcionális. Ha nincs megadva, a függvény neve lesz használva.

A tevékenységindítók definiálásának módja a választott programozási modelltől függ.

activity_trigger A dekoratőr használata közvetlenül a Python-függvénykódban.

Ez az eseményindító kötés belsőleg lekérdezi a konfigurált tartós tárolót az új tevékenységvégrehajtási eseményekhez.

Eseményindító viselkedése

Íme néhány megjegyzés a tevékenységindítóról:

  • Szálkezelés – A vezénylési eseményindítótól eltérően a tevékenységindítók nem korlátozzák a szálkezelést vagy az I/O-t. Ezek kezelhetők, mint a normál függvények.
  • Méregüzenetek kezelése – A tevékenységindítók nem támogatják a méregüzeneteket.
  • Üzenet láthatósága – A tevékenységindító üzenetei le vannak kérve, és konfigurálható ideig láthatatlanok maradnak. Az üzenetek láthatósága automatikusan megújul, amíg a függvényalkalmazás fut és kifogástalan állapotban van.
  • Visszatérési értékek – A visszaadott értékek JSON-ra vannak szerializálva, és megmaradnak a konfigurált tartós tárolóban.

Használat aktiválása

A tevékenységindító kötése támogatja a bemeneteket és a kimeneteket is, ugyanúgy, mint a vezénylési eseményindítót. Íme néhány tudnivaló a bemenet és a kimenet kezeléséről:

  • bemenetek – A tevékenységindítók egy vezénylő függvény bemeneteivel hívhatók meg. Minden bemenetnek JSON-szerializálhatónak kell lennie.
  • kimenetek – A tevékenységfüggvények támogatják a kimeneti értékeket és a bemeneteket. A függvény visszatérési értéke a kimeneti érték hozzárendelésére szolgál, és JSON-szerializálhatónak kell lennie.
  • metaadatok – A .NET-tevékenységfüggvények egy string instanceId paraméterhez kapcsolódva lekérhetik a hívó vezénylés példányazonosítóját.

Trigger minta

Az alábbi példakód bemutatja, hogyan nézhet ki egy egyszerű SayHello tevékenységfüggvény.

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

A .NET-kötés ActivityTriggerAttribute alapértelmezett paramétertípusa az IDurableActivityContext (vagy DurableActivityContext for Durable Functions v1). A .NET-tevékenységindítók azonban támogatják a JSON-szerializálható típusok (beleértve a primitív típusok) kötését is, így ugyanez a függvény az alábbiak szerint egyszerűsíthető:

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

A JavaScript-kötések további paraméterekként is átadhatók, így ugyanaz a függvény az alábbiak szerint egyszerűsíthető:

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);
}

Bemeneti és kimeneti kötések használata

A tevékenységindító kötése mellett rendszeres bemeneti és kimeneti kötéseket is használhat.

Használhatja például a tevékenységkötés bemenetét, és üzenetet küldhet egy Eseményközpontnak az Event Hubs kimeneti kötésével:

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

Vezénylési ügyfél

A vezénylési ügyfélkötés lehetővé teszi a vezénylő függvényekkel interakcióban lévő függvények írását. Ezeket a függvényeket gyakran ügyfélfüggvényeknek nevezzük. A vezénylési példányokat például a következő módokon hajthatja végre:

  • Indítsa el őket.
  • Az állapotuk lekérdezése.
  • Állítsa le őket.
  • Eseményeket küldhet nekik futás közben.
  • Példányelőzmények törlése.

A vezénylési ügyfélhez a DurableClientAttribute attribútummal (OrchestrationClientAttribute in Durable Functions v1.x) csatlakozhat.

A vezénylési ügyfélhez a jegyzet használatával @DurableClientInput kapcsolódhat.

A tartós ügyfél eseményindítóját a következő JSON-objektum határozza meg a bindings function.json tömbjében:

{
    "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 – Olyan esetekben használatos, amikor több függvényalkalmazás is ugyanazt a tárfiókot használja, de el kell különíteni egymástól. Ha nincs megadva, a rendszer az alapértelmezett értéket host.json használja. Ennek az értéknek meg kell egyeznie a cél vezénylőfüggvények által használt értékkel.
  • connectionName– Egy tárfiókot tartalmazó alkalmazásbeállítás neve kapcsolati sztring. A kapcsolati sztring által képviselt tárfióknak meg kell egyeznie a cél vezénylőfüggvények által használt fiókkal. Ha nincs megadva, a függvényalkalmazás alapértelmezett tárfiókja kapcsolati sztring.

Feljegyzés

A legtöbb esetben azt javasoljuk, hogy hagyja ki ezeket a tulajdonságokat, és az alapértelmezett viselkedésre támaszkodik.

A tartós ügyfél-eseményindító definiálásának módja a választott programozási modelltől függ.

durable_client_input A dekoratőr használata közvetlenül a Python-függvénykódban.

Ügyfélhasználat

Általában az IDurableClienthez (DurableOrchestrationClient in Durable Functions v1.x) kapcsolódik, amely teljes hozzáférést biztosít a Durable Functions által támogatott vezénylési ügyfél API-khoz.

Általában az DurableClientContext osztályhoz kötődik.

Az ügyfélobjektumokhoz való hozzáféréshez a nyelvspecifikus SDK-t kell használnia.

Íme egy példa üzenetsor által aktivált függvényre, amely elindít egy "HelloWorld" vezénylést.

[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);
}

Feljegyzés

Az előző C# kód a Durable Functions 2.x-hez készült. A Durable Functions 1.x esetében az attribútum helyett attribútumot DurableClient kell használniaOrchestrationClient, és a DurableOrchestrationClient paramétertípust kell használnia helyett.IDurableOrchestrationClient A verziók közötti különbségekről további információt a Durable Functions-verziók című cikkben talál.

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);
}

A példányok elindításával kapcsolatos további részletek a Példánykezelésben találhatók.

Entitás-eseményindító

Az entitás-eseményindítók lehetővé teszik az entitásfüggvények készítését. Ez az eseményindító támogatja egy adott entitáspéldány eseményeinek feldolgozását.

Feljegyzés

Az entitás-eseményindítók a Durable Functions 2.x-től érhetők el.

Ez az eseményindító kötés belsőleg lekérdezi a konfigurált tartós tárolót az új entitásműveletek esetében, amelyeket végre kell hajtani.

Az entitás-eseményindító az EntityTriggerAttribute .NET attribútummal van konfigurálva.

Az entitás-eseményindítót a következő JSON-objektum határozza meg a bindings function.json tömbjében:

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

Alapértelmezés szerint egy entitás neve a függvény neve.

Feljegyzés

A Java még nem támogatja az entitás-eseményindítókat.

Az entitás-eseményindító definiálásának módja a választott programozási modelltől függ.

entity_trigger A dekoratőr használata közvetlenül a Python-függvénykódban.

Eseményindító viselkedése

Íme néhány megjegyzés az entitás-eseményindítóról:

  • Egyszálas: A rendszer egyetlen diszpécserszálat használ egy adott entitás műveleteinek feldolgozásához. Ha egyszerre több üzenetet küld egy entitásnak, a műveletek egyenként lesznek feldolgozva.
  • Méregüzenetek kezelése – Az entitások eseményindítói nem támogatják a méregüzeneteket.
  • Üzenet láthatósága – Az entitás-eseményindító üzenetei le vannak kérve, és konfigurálható ideig láthatatlanok maradnak. Az üzenetek láthatósága automatikusan megújul, amíg a függvényalkalmazás fut és kifogástalan állapotban van.
  • Visszaadott értékek – Az entitásfüggvények nem támogatják a visszatérési értékeket. Vannak olyan API-k, amelyek az állapot mentésére vagy az értékek vezényléseknek való visszaadására használhatók.

Az entitások végrehajtása során végrehajtott állapotváltozások a végrehajtás befejezése után automatikusan megmaradnak.

Az entitás-eseményindítók definiálásával és használatával kapcsolatos további információkért és példákért tekintse meg a Durable Entityes dokumentációját.

Entitásügyfél

Az entitásügyfél-kötés lehetővé teszi az entitásfüggvények aszinkron aktiválását. Ezeket a függvényeket néha ügyfélfüggvényeknek is nevezik.

Az entitásügyfélhez a DurableClientAttribute .NET attribútummal lehet kapcsolódni a .NET osztálykódtár-függvényekben.

Feljegyzés

A [DurableClientAttribute] vezénylési ügyfélhez való kötéshez is használható.

Az entitásügyfélt a következő JSON-objektum határozza meg a bindings function.json tömbjében:

{
    "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 – Olyan esetekben használatos, amikor több függvényalkalmazás is ugyanazt a tárfiókot használja, de el kell különíteni egymástól. Ha nincs megadva, a rendszer az alapértelmezett értéket host.json használja. Ennek az értéknek meg kell egyeznie a célentitásfüggvények által használt értékkel.
  • connectionName– Egy tárfiókot tartalmazó alkalmazásbeállítás neve kapcsolati sztring. A kapcsolati sztring által képviselt tárfióknak meg kell egyeznie a cél entitásfüggvények által használt fiókkal. Ha nincs megadva, a függvényalkalmazás alapértelmezett tárfiókja kapcsolati sztring.

Feljegyzés

A legtöbb esetben azt javasoljuk, hogy hagyja ki az opcionális tulajdonságokat, és az alapértelmezett viselkedésre támaszkodik.

Az entitásügyfél definiálásának módja a választott programozási modelltől függ.

durable_client_input A dekoratőr használata közvetlenül a Python-függvénykódban.

Feljegyzés

Az entitás-ügyfelek még nem támogatottak a Java esetében.

Az entitásokkal ügyfélként való interakcióval kapcsolatos további információkért és példákért tekintse meg a Durable Entities dokumentációját.

host.json beállítások

A Durable Functions konfigurációs beállításai.

Feljegyzés

A Durable Functions összes fő verziója támogatott az Azure Functions-futtatókörnyezet minden verziójában. A host.json konfiguráció sémája azonban kissé eltér az Azure Functions-futtatókörnyezet verziójától és a használt Durable Functions-bővítményverziótól függően. Az alábbi példák az Azure Functions 2.0-s és 3.0-s használatára szolgálnak. Ha az Azure Functions 1.0-t használja, mindkét példában ugyanazok a beállítások érhetők el, de a host.json "durableTask" szakaszának a host.json konfiguráció gyökerében kell lennie a "bővítmények" mező helyett.

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

A feladatközpont nevének betűvel kell kezdődnie, és csak betűkből és számokból kell állnia. Ha nincs megadva, a függvényalkalmazás alapértelmezett feladatközpontjának neve a TestHubName. További információ: Task Hubs.

Tulajdonság Alapértelmezett Leírás
hubName TestHubName (DurableFunctionsHub, ha Durable Functions 1.x-et használ) Alternatív feladatközpont-nevek használatával több Durable Functions-alkalmazást is elkülöníthet egymástól, még akkor is, ha ugyanazt a tárterület-háttérrendszert használják.
controlQueueBatchSize 32 A vezérlősorból egyszerre lekérendő üzenetek száma.
controlQueueBufferThreshold Használati terv Pythonhoz: 32
Használati terv JavaScripthez és C#: 128
Dedikált/prémium csomag: 256
A memóriában egyszerre pufferelhető vezérlősor-üzenetek száma, amelynél a kézbesítő megvárja a további üzenetek lekérdezése előtt.
partitionCount 4 A vezérlősor partíciószáma. 1 és 16 közötti pozitív egész szám lehet.
controlQueueVisibilityTimeout 5 perc A lekérdezett vezérlősorüzenetek láthatósági időtúllépése.
workItemQueueVisibilityTimeout 5 perc A lekérdezett munkaelem üzenetsor-üzeneteinek láthatósági időtúllépése.
maxConcurrentActivityFunctions Használati terv: 10
Dedikált/Prémium csomag: 10X a processzorok száma az aktuális gépen
Az egy gazdagéppéldányon egyidejűleg feldolgozható tevékenységfüggvények maximális száma.
maxConcurrentOrchestratorFunctions Használati terv: 5
Dedikált/Prémium csomag: 10X a processzorok száma az aktuális gépen
Az egyidejűleg egyetlen gazdagéppéldányon feldolgozható vezénylőfüggvények maximális száma.
maxQueuePollingInterval 30 másodperc A vezérlő és a munkaelem-üzenetsor lekérdezési időközének maximális értéke hh:mm:ss formátumban. A magasabb értékek nagyobb üzenetfeldolgozási késéseket eredményezhetnek. Az alacsonyabb értékek magasabb tárolási költségeket eredményezhetnek a megnövekedett tárolási tranzakciók miatt.
connectionName (2.7.0 és újabb)
connectionStringName (2.x)
azureStorage Csatlakozás ionStringName (1.x)
AzureWebJobsStorage Egy alkalmazásbeállítás vagy beállításgyűjtemény neve, amely meghatározza, hogyan csatlakozhat a mögöttes Azure Storage-erőforrásokhoz. Ha egyetlen alkalmazásbeállítást ad meg, annak Azure Storage-kapcsolati sztring kell lennie.
trackingStore Csatlakozás ionName (2.7.0 és újabb verziók)
trackingStore Csatlakozás ionStringName
Az előzmény- és példánytáblákhoz való csatlakozást meghatározó alkalmazásbeállítás vagy beállításgyűjtemény neve. Ha egyetlen alkalmazásbeállítást ad meg, annak Azure Storage-kapcsolati sztring kell lennie. Ha nincs megadva, a rendszer a connectionStringName (Durable 2.x) vagy azureStorageConnectionStringName a (Durable 1.x) kapcsolatot használja.
trackingStoreNamePrefix Az Előzmények és példányok táblákhoz használandó előtag, ha trackingStoreConnectionStringName meg van adva. Ha nincs beállítva, az alapértelmezett előtag értéke a következő lesz DurableTask: . Ha trackingStoreConnectionStringName nincs megadva, akkor az Előzmények és példányok táblák az hubName értéket használják előtagként, és a rendszer figyelmen kívül hagyja az trackingStoreNamePrefix összes beállítást.
traceInputsAndOutputs false A függvényhívások bemeneteinek és kimeneteinek nyomon követését jelző érték. A függvényvégrehajtási események nyomon követésekor az alapértelmezett viselkedés a szerializált bemenetek és a függvényhívások kimenetei bájtjainak száma. Ez a viselkedés minimális információt nyújt arról, hogy a bemenetek és kimenetek hogyan néznek ki a naplók felfúvódása vagy a bizalmas információk véletlen felfedése nélkül. Ha ezt a tulajdonságot igaz értékre állítja, az alapértelmezett függvénynaplózás a függvénybemenetek és -kimenetek teljes tartalmát naplózza.
traceReplayEvents false Egy érték, amely jelzi, hogy a vezénylési ismétlési eseményeket az Alkalmazás Elemzések kell-e írni.
eventGridTopicEndpoint Egy Egyéni Azure Event Grid-témakörvégpont URL-címe. Ha ez a tulajdonság be van állítva, a vezénylési életciklus értesítési eseményei közzé lesznek téve ezen a végponton. Ez a tulajdonság támogatja az alkalmazás Gépház felbontását.
eventGridKeySettingName Annak az alkalmazásbeállításnak a neve, amely tartalmazza az Azure Event Grid egyéni témakörével való hitelesítéshez használt kulcsot a következő helyen EventGridTopicEndpoint: .
eventGridPublishRetryCount 0 Az újrapróbálkozások száma, ha az Event Grid-témakörben való közzététel sikertelen.
eventGridPublishRetryInterval 5 perc Az Event Grid hh:mm:ss formátumban teszi közzé az újrapróbálkozási időközt .
eventGridPublishEventTypes Az Event Gridben közzéteendő eseménytípusok listája. Ha nincs megadva, az összes eseménytípus közzé lesz téve. Az engedélyezett értékek a következők: Started, Completed, FailedTerminated.
useAppLease true Ha be van állítva, az truealkalmazásoknak alkalmazásszintű blobbérletet kell beszerezniük a feladatközpont-üzenetek feldolgozása előtt. További információkért tekintse meg a vészhelyreállítás és a földrajzi eloszlás dokumentációját. A 2.3.0-s verziótól kezdve érhető el.
useLegacyPartitionManagement false Ha be van falseállítva, egy partíciókezelési algoritmust használ, amely csökkenti a függvények ismétlődő végrehajtásának lehetőségét a horizontális felskálázáskor. A 2.3.0-s verziótól kezdve érhető el.
useTablePartitionManagement false Ha be van trueállítva, egy partíciókezelési algoritmust használ, amelyet az Azure Storage V2-fiókok költségeinek csökkentésére terveztek. A 2.10.0-s verziótól kezdve érhető el. Ez a funkció jelenleg előzetes verzióban érhető el, és még nem kompatibilis a Használat csomaggal.
useGracefulShutdown false (Előzetes verzió) Engedélyezze a kecses leállítást, hogy csökkentse annak az esélyét, hogy a gazdagép leállítja a folyamaton belüli függvények végrehajtását.
maxEntityOperationBatchSize(2.6.1) Használati terv: 50
Dedikált/prémium csomag: 5000
A kötegként feldolgozott entitásműveletek maximális száma. Ha 1 értékre van állítva, a kötegelés le van tiltva, és minden műveletüzenetet egy külön függvényhívás dolgoz fel.
storeInputsInOrchestrationHistory false Ha be van trueállítva, a Durable Task Framework a tevékenységbemenetek mentésére utasítja az előzménytáblában. Ez lehetővé teszi a tevékenységfüggvények bemeneteinek megjelenítését a vezénylési előzmények lekérdezésekor.

Ezek közül a beállítások közül sok a teljesítmény optimalizálására használható. További információ: Teljesítmény és skálázás.

Következő lépések