Bindingen voor Durable Functions (Azure Functions)

De Durable Functions-extensie introduceert drie triggerbindingen die de uitvoering van orchestrator-, entiteits- en activiteitsfuncties beheren. Er wordt ook een uitvoerbinding geïntroduceerd die fungeert als een client voor de Durable Functions-runtime.

Zorg ervoor dat u bovenaan het artikel uw Durable Functions-ontwikkeltaal kiest.

Belangrijk

Dit artikel ondersteunt zowel Python v1- als Python v2-programmeermodellen voor Durable Functions.

Python v2-programmeermodel

Durable Functions wordt ondersteund in het nieuwe Python v2-programmeermodel. Als u het v2-model wilt gebruiken, moet u de Durable Functions SDK installeren. Dit is het PyPI-pakket azure-functions-durable, de versie 1.2.2 of een latere versie. U moet ook controleren host.json of uw app verwijst naar Extensiebundels versie 4.x om het v2-model te gebruiken met Durable Functions.

U kunt feedback en suggesties geven in de Durable Functions SDK voor Python-opslagplaats.

Indelingstrigger

Met de orchestrationtrigger kunt u duurzame orchestratorfuncties ontwerpen. Deze trigger wordt uitgevoerd wanneer een nieuw indelingsexemplaar wordt gepland en wanneer een bestaand orchestration-exemplaar een gebeurtenis ontvangt. Voorbeelden van gebeurtenissen die orchestratorfuncties kunnen activeren, zijn duurzame timerverlooptijd, reacties op activiteitsfuncties en gebeurtenissen die door externe clients worden gegenereerd.

Wanneer u functies in .NET ontwerpt, wordt de orchestrationtrigger geconfigureerd met behulp van het .NET-kenmerk OrchestrationTriggerAttribute .

Voor Java wordt de @DurableOrchestrationTrigger aantekening gebruikt om de orchestrationtrigger te configureren.

Wanneer u orchestratorfuncties schrijft, wordt de indelingstrigger gedefinieerd door het volgende JSON-object in de bindings matrix van het function.json-bestand :

{
    "name": "<Name of input parameter in function signature>",
    "orchestration": "<Optional - name of the orchestration>",
    "type": "orchestrationTrigger",
    "direction": "in"
}
  • orchestration is de naam van de indeling die clients moeten gebruiken wanneer ze nieuwe exemplaren van deze orchestratorfunctie willen starten. Deze eigenschap is optioneel. Als dit niet is opgegeven, wordt de naam van de functie gebruikt.

Azure Functions ondersteunt twee programmeermodellen voor Python. De manier waarop u een indelingstrigger definieert, is afhankelijk van het gekozen programmeermodel.

Met het Python v2-programmeermodel kunt u een indelingstrigger definiëren met behulp van de orchestration_trigger decorator rechtstreeks in uw Python-functiecode.

In het v2-model worden de Durable Functions-triggers en -bindingen geopend vanuit een exemplaar van DFApp, een subklasse van FunctionApp die extra Durable Functions-specifieke decorators exporteert.

Intern controleert deze triggerbinding het geconfigureerde duurzame archief voor nieuwe indelingsgebeurtenissen, zoals startgebeurtenissen voor indelingen, duurzame timerverloopgebeurtenissen, reactiegebeurtenissen van activiteitsfuncties en externe gebeurtenissen die door andere functies worden gegenereerd.

Triggergedrag

Hier volgen enkele notities over de indelingstrigger:

  • Eén threading : één dispatcherthread wordt gebruikt voor alle uitvoering van orchestratorfuncties op één hostexemplaren. Daarom is het belangrijk om ervoor te zorgen dat orchestratorfunctiecode efficiënt is en geen I/O uitvoert. Het is ook belangrijk om ervoor te zorgen dat deze thread geen asynchroon werk doet, behalve wanneer u wacht op specifieke taaktypen van Durable Functions.
  • Afhandeling van gifberichten - Er is geen ondersteuning voor gifberichten in indelingstriggers.
  • Zichtbaarheid van berichten: triggerberichten voor indeling worden ontdubbeld en onzichtbaar gehouden voor een configureerbare duur. De zichtbaarheid van deze berichten wordt automatisch vernieuwd zolang de functie-app wordt uitgevoerd en in orde is.
  • Retourwaarden : retourwaarden worden geserialiseerd naar JSON en blijven behouden in de indelingsgeschiedenistabel in Azure Table Storage. Deze retourwaarden kunnen worden opgevraagd door de orchestration-clientbinding, die later wordt beschreven.

Waarschuwing

Orchestrator-functies mogen nooit andere invoer- of uitvoerbindingen gebruiken dan de orchestrationtriggerbinding. Als u dit doet, kan dit problemen veroorzaken met de Durable Task-extensie, omdat deze bindingen mogelijk niet voldoen aan de regels voor één threading en I/O. Als u andere bindingen wilt gebruiken, voegt u deze toe aan een activiteitsfunctie die wordt aangeroepen vanuit de orchestratorfunctie. Zie de documentatie over orchestrator-functiecodebeperkingen voor meer informatie over het coderen van orchestratorfuncties.

Waarschuwing

Orchestrator-functies mogen nooit worden gedeclareerd async.

Triggergebruik

De indelingstriggerbinding ondersteunt zowel invoer als uitvoer. Hier volgen enkele dingen die u moet weten over de verwerking van invoer en uitvoer:

  • invoer - Indelingstriggers kunnen worden aangeroepen met invoer, die toegankelijk zijn via het contextinvoerobject. Alle invoer moet JSON-serializeerbaar zijn.
  • uitvoer- Orchestration-triggers ondersteunen uitvoerwaarden en invoer. De retourwaarde van de functie wordt gebruikt om de uitvoerwaarde toe te wijzen en moet JSON-serializeerbaar zijn.

Triggervoorbeeld

In de volgende voorbeeldcode ziet u hoe de eenvoudigste orchestratorfunctie 'Hallo wereld' eruit kan zien. Houd er rekening mee dat met deze voorbeeldorchestrator geen taken worden gepland.

Het specifieke kenmerk dat wordt gebruikt om de trigger te definiëren, is afhankelijk van of u uw C#-functies in-proces of in een geïsoleerd werkproces uitvoert.

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

Notitie

De vorige code is bedoeld voor Durable Functions 2.x. Voor Durable Functions 1.x moet u in DurableOrchestrationContext plaats van IDurableOrchestrationContext. Zie het artikel Durable Functions-versies voor meer informatie over de verschillen tussen versies.

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

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

Notitie

De durable-functions bibliotheek zorgt ervoor dat de synchrone context.done methode wordt aangeroepen wanneer de generatorfunctie wordt afgesloten.

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

De meeste orchestratorfuncties roepen activiteitsfuncties aan, dus hier volgt een voorbeeld van 'Hallo wereld', waarin wordt gedemonstreert hoe u een activiteitsfunctie aanroept:

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

Notitie

De vorige code is bedoeld voor Durable Functions 2.x. Voor Durable Functions 1.x moet u in DurableOrchestrationContext plaats van IDurableOrchestrationContext. Zie het artikel Over Durable Functions-versies voor meer informatie over de verschillen tussen versies.

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

Activiteittrigger

Met de activiteitstrigger kunt u functies ontwerpen die worden aangeroepen door orchestratorfuncties, ook wel activiteitsfuncties genoemd.

De activiteitstrigger wordt geconfigureerd met behulp van het .NET-kenmerk ActivityTriggerAttribute .

De activiteitstrigger wordt geconfigureerd met behulp van de @DurableActivityTrigger aantekening.

De activiteitstrigger wordt gedefinieerd door het volgende JSON-object in de bindings matrix van function.json:

{
    "name": "<Name of input parameter in function signature>",
    "activity": "<Optional - name of the activity>",
    "type": "activityTrigger",
    "direction": "in"
}
  • activity is de naam van de activiteit. Deze waarde is de naam die orchestratorfuncties gebruiken om deze activiteitsfunctie aan te roepen. Deze eigenschap is optioneel. Als dit niet is opgegeven, wordt de naam van de functie gebruikt.

De manier waarop u een activiteitstrigger definieert, is afhankelijk van het gekozen programmeermodel.

activity_trigger De decorator rechtstreeks in uw Python-functiecode gebruiken.

Intern worden met deze triggerbinding de geconfigureerde duurzame opslag gecontroleerd op nieuwe activiteitenuitvoeringsgebeurtenissen.

Triggergedrag

Hier volgen enkele opmerkingen over de activiteitstrigger:

  • Threading : in tegenstelling tot de indelingstrigger hebben activiteitstriggers geen beperkingen voor threading of I/O. Ze kunnen worden behandeld als normale functies.
  • Afhandeling van gifberichten - Er is geen ondersteuning voor gifberichten in activiteitstriggers.
  • Zichtbaarheid van berichten: berichten over activiteitstriggers worden in de wachtrij geplaatst en onzichtbaar gehouden voor een configureerbare duur. De zichtbaarheid van deze berichten wordt automatisch vernieuwd zolang de functie-app wordt uitgevoerd en in orde is.
  • Retourwaarden: retourwaarden worden geserialiseerd naar JSON en bewaard in het geconfigureerde duurzame archief.

Triggergebruik

De activiteitstriggerbinding ondersteunt zowel invoer als uitvoer, net zoals de orchestrationtrigger. Hier volgen enkele dingen die u moet weten over de verwerking van invoer en uitvoer:

  • invoer : activiteittriggers kunnen worden aangeroepen met invoer van een orchestratorfunctie. Alle invoer moet JSON-serializeerbaar zijn.
  • uitvoer - Activiteitsfuncties ondersteunen uitvoerwaarden en invoer. De retourwaarde van de functie wordt gebruikt om de uitvoerwaarde toe te wijzen en moet JSON-serializeerbaar zijn.
  • metagegevens : .NET-activiteitsfuncties kunnen worden gebonden aan een string instanceId parameter om de exemplaar-id van de aanroepende indeling op te halen.

Triggervoorbeeld

In de volgende voorbeeldcode ziet u hoe een eenvoudige SayHello activiteitsfunctie eruit kan zien.

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

Het standaardparametertype voor de .NET-binding ActivityTriggerAttribute is IDurableActivityContext (of DurableActivityContext voor Durable Functions v1). .NET-activiteittriggers ondersteunen echter ook binding rechtstreeks met JSON-serializebare typen (inclusief primitieve typen), zodat dezelfde functie als volgt kan worden vereenvoudigd:

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

JavaScript-bindingen kunnen ook worden doorgegeven als extra parameters, zodat dezelfde functie als volgt kan worden vereenvoudigd:

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

Invoer- en uitvoerbindingen gebruiken

U kunt naast de activiteitstriggerbinding ook reguliere invoer- en uitvoerbindingen gebruiken.

U kunt bijvoorbeeld de invoer naar uw activiteitsbinding nemen en een bericht verzenden naar een Event Hub met behulp van de Event Hubs-uitvoerbinding:

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

Indelingsclient

Met de orchestration-clientbinding kunt u functies schrijven die communiceren met orchestratorfuncties. Deze functies worden vaak clientfuncties genoemd. U kunt bijvoorbeeld op de volgende manieren reageren op indelingsexemplaren:

  • Start ze.
  • Voer een query uit op hun status.
  • Beëindig ze.
  • Verzend gebeurtenissen naar hen terwijl ze worden uitgevoerd.
  • Exemplaargeschiedenis leegmaken.

U kunt verbinding maken met de orchestration-client met behulp van het kenmerk DurableClientAttribute (OrchestrationClientAttribute in Durable Functions v1.x).

U kunt verbinding maken met de indelingsclient met behulp van de @DurableClientInput aantekening.

De duurzame clienttrigger wordt gedefinieerd door het volgende JSON-object in de bindings matrix van 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 - Wordt gebruikt in scenario's waarin meerdere functie-apps hetzelfde opslagaccount delen, maar moeten worden geïsoleerd van elkaar. Als dit niet is opgegeven, wordt de standaardwaarde gebruikt host.json . Deze waarde moet overeenkomen met de waarde die wordt gebruikt door de doelorchestratorfuncties.
  • connectionName- De naam van een app-instelling die een opslagaccount bevat verbindingsreeks. Het opslagaccount dat wordt vertegenwoordigd door deze verbindingsreeks moet dezelfde zijn die wordt gebruikt door de doelorchestratorfuncties. Als dit niet is opgegeven, wordt het standaardopslagaccount verbindingsreeks voor de functie-app gebruikt.

Notitie

In de meeste gevallen raden we u aan deze eigenschappen weg te laten en te vertrouwen op het standaardgedrag.

De manier waarop u een duurzame clienttrigger definieert, is afhankelijk van het gekozen programmeermodel.

durable_client_input De decorator rechtstreeks in uw Python-functiecode gebruiken.

Clientgebruik

Doorgaans verbindt u zich met IDurableClient (DurableOrchestrationClient in Durable Functions v1.x), waarmee u volledige toegang krijgt tot alle orchestration-client-API's die worden ondersteund door Durable Functions.

Normaal gesproken bindt u aan de DurableClientContext klas.

U moet de taalspecifieke SDK gebruiken om toegang te krijgen tot een clientobject.

Hier volgt een voorbeeld van een door wachtrij geactiveerde functie waarmee een 'HelloWorld'-indeling wordt gestart.

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

Notitie

De vorige C#-code is voor Durable Functions 2.x. Voor Durable Functions 1.x moet u het kenmerk gebruiken OrchestrationClient in plaats van het DurableClient kenmerk en moet u het DurableOrchestrationClient parametertype gebruiken in plaats van IDurableOrchestrationClient. Zie het artikel Durable Functions-versies voor meer informatie over de verschillen tussen versies.

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

Meer informatie over het starten van exemplaren vindt u in Exemplaarbeheer.

Entiteitstrigger

Met entiteitstriggers kunt u entiteitsfuncties ontwerpen. Deze trigger ondersteunt het verwerken van gebeurtenissen voor een specifiek entiteitsexemplaar.

Notitie

Entiteitstriggers zijn beschikbaar vanaf Durable Functions 2.x.

Intern controleert deze triggerbinding het geconfigureerde duurzame archief voor nieuwe entiteitsbewerkingen die moeten worden uitgevoerd.

De entiteitstrigger wordt geconfigureerd met behulp van het .NET-kenmerk EntityTriggerAttribute .

De entiteitstrigger wordt gedefinieerd door het volgende JSON-object in de bindings matrix van function.json:

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

De naam van een entiteit is standaard de naam van de functie.

Notitie

Entiteitstriggers worden nog niet ondersteund voor Java.

De manier waarop u een entiteitstrigger definieert, is afhankelijk van het gekozen programmeermodel.

entity_trigger De decorator rechtstreeks in uw Python-functiecode gebruiken.

Triggergedrag

Hier volgen enkele opmerkingen over de entiteitstrigger:

  • Eén thread: Een enkele dispatcherthread wordt gebruikt voor het verwerken van bewerkingen voor een bepaalde entiteit. Als meerdere berichten gelijktijdig naar één entiteit worden verzonden, worden de bewerkingen één voor één verwerkt.
  • Afhandeling van gifberichten - Er is geen ondersteuning voor gifberichten in entiteitstriggers.
  • Zichtbaarheid van berichten: berichten van entiteitstriggers worden in de wachtrij geplaatst en onzichtbaar gehouden voor een configureerbare duur. De zichtbaarheid van deze berichten wordt automatisch vernieuwd zolang de functie-app wordt uitgevoerd en in orde is.
  • Retourwaarden : entiteitsfuncties bieden geen ondersteuning voor retourwaarden. Er zijn specifieke API's die kunnen worden gebruikt om de status op te slaan of waarden weer door te geven aan indelingen.

Alle statuswijzigingen die tijdens de uitvoering aan een entiteit zijn aangebracht, worden automatisch behouden nadat de uitvoering is voltooid.

Zie de documentatie voor Durable Entities voor meer informatie en voorbeelden over het definiëren en gebruiken van entiteitstriggers.

Entiteitsclient

Met de entiteitsclientbinding kunt u asynchroon entiteitsfuncties activeren. Deze functies worden soms clientfuncties genoemd.

U kunt verbinding maken met de entiteitsclient met behulp van het .NET-kenmerk DurableClientAttribute in .NET-klassebibliotheekfuncties.

Notitie

De [DurableClientAttribute] kan ook worden gebruikt om verbinding te maken met de orchestration-client.

De entiteitsclient wordt gedefinieerd door het volgende JSON-object in de bindings matrix van 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 - Wordt gebruikt in scenario's waarin meerdere functie-apps hetzelfde opslagaccount delen, maar moeten worden geïsoleerd van elkaar. Als dit niet is opgegeven, wordt de standaardwaarde gebruikt host.json . Deze waarde moet overeenkomen met de waarde die wordt gebruikt door de doelentiteitsfuncties.
  • connectionName- De naam van een app-instelling die een opslagaccount bevat verbindingsreeks. Het opslagaccount dat wordt vertegenwoordigd door deze verbindingsreeks moet dezelfde zijn die wordt gebruikt door de doelentiteitsfuncties. Als dit niet is opgegeven, wordt het standaardopslagaccount verbindingsreeks voor de functie-app gebruikt.

Notitie

In de meeste gevallen wordt u aangeraden de optionele eigenschappen weg te laten en te vertrouwen op het standaardgedrag.

De manier waarop u een entiteitsclient definieert, is afhankelijk van het gekozen programmeermodel.

durable_client_input De decorator rechtstreeks in uw Python-functiecode gebruiken.

Notitie

Entiteitsclients worden nog niet ondersteund voor Java.

Zie de documentatie over Durable Entities voor meer informatie en voorbeelden over interactie met entiteiten als een client.

host.json-instellingen

Configuratie-instellingen voor Durable Functions.

Notitie

Alle belangrijke versies van Durable Functions worden ondersteund in alle versies van de Azure Functions-runtime. Het schema van de configuratie host.json is echter iets anders afhankelijk van de versie van de Azure Functions-runtime en de versie van de Durable Functions-extensie die u gebruikt. De volgende voorbeelden zijn voor gebruik met Azure Functions 2.0 en 3.0. Als u gebruikmaakt van Azure Functions 1.0, zijn de beschikbare functies in beide voorbeelden dezelfde, maar moet het gedeelte 'durableTask' van host.json in de hoofdmap van de configuratie host.json worden geplaatst, in plaats van in een veld onder 'extensions'.

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

Namen van taakhubs moeten beginnen met een letter en mogen alleen letters en cijfers bevatten. Als dit niet is opgegeven, is de standaardnaam van de taakhubhub voor een functie-app TestHubName. Zie voor meer informatie Taakhubs.

Eigenschappen Standaard Beschrijving
hubName TestHubName (DurableFunctionsHub als u Durable Functions 1.x gebruikt) Er kunnen alternatieve namen voor taakhubs worden gebruikt om meerdere Durable Functions-toepassingen van elkaar te isoleren, zelfs als ze dezelfde back-end voor opslag gebruiken.
controlQueueBatchSize 32 Het aantal berichten dat tegelijkertijd moet worden opgehaald uit de controlewachtrij.
controlQueueBufferThreshold Verbruiksabonnement voor Python: 32
Verbruiksabonnement voor JavaScript en C#: 128
Dedicated/Premium-abonnement: 256
Het aantal controlewachtrijberichten dat in het geheugen tegelijk kan worden gebufferd, waarna de dispatcher wacht totdat extra berichten uit de wachtrij worden verwijderd.
partitionCount 4 Het aantal partities voor de controlewachtrij. Kan een positief geheel getal tussen 1 en 16 zijn.
controlQueueVisibilityTimeout 5 minuten De time-out voor zichtbaarheid van berichten in de controlewachtrij die uit de wachtrij zijn verwijderd.
workItemQueueVisibilityTimeout 5 minuten De time-out voor zichtbaarheid van berichten in de werkitemwachtrij die uit de wachtrij zijn verwijderd.
maxConcurrentActivityFunctions Verbruiksabonnement: 10
Dedicated/Premium-abonnement: 10X het aantal processors op de huidige computer
Het maximum aantal activiteitenfuncties dat gelijktijdig kan worden verwerkt op één exemplaar van een host.
maxConcurrentOrchestratorFunctions Verbruiksabonnement: 5
Dedicated/Premium-abonnement: 10X het aantal processors op de huidige computer
Het maximum aantal orchestratorfuncties dat gelijktijdig kan worden verwerkt op één exemplaar van een host.
maxQueuePollingInterval 30 seconden Het polling-interval van de maximale controle- en werkitemwachtrij in de indeling uu:mm:ss. Hogere waarden kunnen resulteren in hogere berichtverwerkingslatenties. Lagere waarden kunnen resulteren in hogere opslagkosten omdat er een toename is in opslagtransacties.
connectionName (2.7.0 en hoger)
connectionStringName (2.x)
azureStorage Verbinding maken ionStringName (1.x)
AzureWebJobsStorage De naam van een app-instelling of verzameling die aangeeft hoe u verbinding maakt met de onderliggende Azure Storage-resources. Wanneer er één app-instelling wordt opgegeven, moet dit een Azure Storage-verbindingsreeks zijn.
trackingStore Verbinding maken ionName (2.7.0 en hoger)
trackingStoreConnectionStringName
De naam van een app-instelling of verzameling die aangeeft hoe verbinding moet worden gemaakt met de tabellen Geschiedenis en Exemplaren. Wanneer er één app-instelling wordt opgegeven, moet dit een Azure Storage-verbindingsreeks zijn. Als u dit niet opgeeft, wordt de connectionStringName (Durable 2.x) of azureStorageConnectionStringName (Durable 1.x)-verbinding gebruikt.
trackingStoreNamePrefix Het voorvoegsel dat moet worden gebruikt voor de tabellen Geschiedenis en Exemplaren wanneer trackingStoreConnectionStringName is opgegeven. Als deze niet is ingesteld, wordt de standaard voorvoegselwaarde DurableTask. Als trackingStoreConnectionStringName niet is opgegeven, dan gebruiken de tabellen Geschiedenis en Exemplaren de waarde hubName als voorvoegsel en wordt elke instelling voor trackingStoreNamePrefix genegeerd.
traceInputsAndOutputs false Een waarde die aangeeft of de invoer en uitvoer voor functieaanroepen moet worden getraceerd. Het standaardgedrag bij het traceren van functie-uitvoeringsgebeurtenissen is om het aantal bytes in de geserialiseerde invoer en uitvoer voor functieaanroepen op te nemen. Dit gedrag biedt minimale informatie over hoe de invoer en uitvoer eruitzien zonder bloating van de logboeken te veroorzaken of per ongeluk gevoelige informatie weer te geven. Als u deze eigenschap instelt op waar, wordt de volledige inhoud van functie-invoer en -uitvoer vastgelegd door de standaardfunctie logboekregistratie.
traceReplayEvents false Een waarde die aangeeft of indelingsreplay-gebeurtenissen naar Application Insights moeten worden geschreven.
eventGridTopicEndpoint De URL van een eindpunt met aangepast onderwerp van Azure Event Grid. Wanneer deze eigenschap is ingesteld, worden meldingsgebeurtenissen van de indelings-cyclus naar dit eindpunt gepubliceerd. Deze eigenschap ondersteunt de resolutie van de App-instellingen.
eventGridKeySettingName De naam van de app-instelling met de sleutel die wordt gebruikt voor de verificatie met het aangepaste onderwerp van Azure Event Grid op EventGridTopicEndpoint.
eventGridPublishRetryCount 0 Het aantal keren dat het opnieuw moet worden geprobeerd als het publiceren naar het Event Grid-onderwerp mislukt.
eventGridPublishRetryInterval 5 minuten Het interval voor nieuwe pogingen van Event Grid wordt gepubliceerd in de notatie uu: mm: ss.
eventGridPublishEventTypes Een lijst met gebeurtenistypen die moeten worden gepubliceerd op Event Grid. Als u niets opgeeft, worden alle gebeurtenistypen gepubliceerd. Toegestane waarden zijn Started, Completed, Failed, Terminated.
useAppLease true Wanneer het is ingesteld op true, moeten apps een blob-lease op app-niveau verkrijgen voordat taakhub-berichten worden verwerkt. Zie voor meer informatie de documentatie over herstel na noodgeval en geo-distributie. Vanaf v2.3.0 beschikbaar.
useLegacyPartitionManagement false Wanneer deze optie is ingesteld false, gebruikt u een algoritme voor partitiebeheer dat de mogelijkheid van dubbele functie-uitvoering vermindert bij het uitschalen. Beschikbaar vanaf v2.3.0.
useTablePartitionManagement false Wanneer deze instelling is ingesteld true, wordt een algoritme voor partitiebeheer gebruikt dat is ontworpen om de kosten voor Azure Storage V2-accounts te verlagen. Beschikbaar vanaf v2.10.0. Deze functie is momenteel beschikbaar als preview-versie en is nog niet compatibel met het verbruiksabonnement.
useGracefulShutdown false (Preview) Schakel probleemloos afsluiten in om de kans op het afsluiten van de host te verminderen tijdens het verwerken van functies die in uitvoer zijn.
maxEntityOperationBatchSize(2.6.1) Verbruiksabonnement: 50
Dedicated/Premium-abonnement: 5000
Het maximum aantal entiteitsbewerkingen dat als batch wordt verwerkt. Als deze optie is ingesteld op 1, wordt batchverwerking uitgeschakeld en wordt elk bewerkingsbericht verwerkt door een afzonderlijke functie-aanroep.
storeInputsInOrchestrationHistory false Als deze optie is ingesteld true, geeft het Durable Task Framework aan om activiteitsinvoer op te slaan in de geschiedenistabel. Hierdoor kunnen de invoer van activiteitsfuncties worden weergegeven bij het uitvoeren van query's op de indelingsgeschiedenis.

Veel van deze instellingen zijn voor het optimaliseren van de prestaties. Zie Prestaties en schaal aanpassen voor meer informatie.

Volgende stappen