Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
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.
In dit artikel wordt het gebruik van deze vier bindingen besproken en vindt u codevoorbeelden. Het bevat ook informatie over de Durable Functions-configuratie-eigenschappen in host.json, het metagegevensbestand dat instellingen bevat die van invloed zijn op alle functies in een functie-app.
Zorg ervoor dat u bovenaan het artikel uw Durable Functions-ontwikkeltaal selecteert.
Beide versies van het Python-programmeermodel voor Azure Functions worden ondersteund door Durable Functions. Omdat Python v2 de aanbevolen versie is, bevatten voorbeelden in dit artikel uitsluitend deze versie.
Vereiste voorwaarden
- Durable Functions SDK, het Pakketindexpakket
azure-functions-durable(PyPI) van Python, versie1.2.2of een latere versie - Extensiebundel versie 4.x (of een latere versie), die is ingesteld in het host.json projectbestand
U kunt feedback en suggesties geven in de Durable Functions SDK voor Python-opslagplaats.
orkestratietrigger
U kunt de orchestrationtrigger gebruiken om duurzame orchestratorfuncties te ontwikkelen. Deze trigger wordt uitgevoerd wanneer een nieuw orchestratie-exemplaar wordt gepland en wanneer een bestaand orchestratie-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 ontwikkelt, gebruikt u het kenmerk OrchestrationTriggerAttribute . NET om de orchestration-trigger te configureren.
Voor Java gebruikt u de @DurableOrchestrationTrigger annotatie om de orkestratietrigger te configureren.
Wanneer u versie 4 van het Node.js programmeermodel gebruikt om functies te ontwikkelen, importeert u het app object uit de @azure/functions npm module. Vervolgens roept u de methode van de app.orchestration Durable Functions-API rechtstreeks aan in uw functiecode. Met deze methode wordt uw orchestratorfunctie geregistreerd bij het Durable Functions-framework.
Wanneer u orchestratorfuncties schrijft, definieert u de orchestrationtrigger met behulp van 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-orchestration>",
"type": "orchestrationTrigger",
"direction": "in"
}
De orchestration waarde is de naam van de orchestratie die clients moeten gebruiken wanneer ze nieuwe exemplaren van de orchestrator-functie willen starten. Deze eigenschap is optioneel. Als u deze niet opgeeft, wordt de naam van de functie gebruikt.
Wanneer u het Python v2-programmeermodel gebruikt, kunt u een indelingstrigger definiëren met behulp van de orchestration_trigger decorator rechtstreeks in uw Python-functiecode.
In het v2-model hebt u toegang tot de Durable Functions-triggers en -bindingen van een exemplaar van DFApp. U kunt deze subklasse FunctionApp gebruiken om decorators te exporteren die specifiek zijn voor Durable Functions.
Intern controleert deze triggerbinding de geconfigureerde duurzame opslag op nieuwe orkestratiegebeurtenissen. Voorbeelden van gebeurtenissen zijn orkestratie start-gebeurtenissen, duurbare timer expiratie-gebeurtenissen, activiteitsfunctie-responsgebeurtenissen en externe gebeurtenissen die door andere functies worden gegenereerd.
Triggergedrag
Hier volgen enkele notities over de orkestratietrigger:
- Single-threading: een enkele dispatcherthread wordt gebruikt voor alle uitvoering van orchestratiefuncties op één hostexemplaar. Daarom is het belangrijk om ervoor te zorgen dat orchestratorfunctiecode efficiënt is en geen I/O-bewerkingen uitvoert. Het is ook belangrijk om ervoor te zorgen dat deze thread geen asynchroon werk uitvoert, behalve wanneer u wacht op taaktypen die specifiek zijn voor Durable Functions.
- Afhandeling van gifberichten: Er is geen ondersteuning voor gifberichten in orkestratietriggers.
- Zichtbaarheid van berichten: Orchestratie-triggerberichten worden uit de wachtrij gehaald en onzichtbaar gehouden voor een configureerbare duur. De zichtbaarheid van deze berichten wordt automatisch vernieuwd zolang de functie-app actief en gezond is.
- Retourwaarden: Retourwaarden worden geserialiseerd naar JSON en opgeslagen in de orchestratiegeschiedenistabel 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. Het gebruik van andere bindingen kan 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 Codebeperkingen voor Orchestrator-functies voor meer informatie over het coderen van orchestratorfuncties.
Waarschuwing
Orchestrator-functies mogen nooit worden gedeclareerd async.
Triggergebruik
De orchestratie-triggerbinding ondersteunt zowel invoer als uitvoer. Hier volgen enkele opmerkingen over de verwerking van invoer en uitvoer:
- Invoer: U kunt orkestratietriggers aanroepen die invoer bevatten. De invoer wordt geopend via het contextinvoerobject. Alle invoer moet JSON-serializeerbaar zijn.
- Uitvoer: Indelingstriggers ondersteunen zowel uitvoer- als invoerwaarden. De retourwaarde van de functie wordt gebruikt om de uitvoerwaarde toe te wijzen. De retourwaarde moet JSON-serializeerbaar zijn.
Triggervoorbeeld
De volgende code bevat een voorbeeld van een eenvoudige Hello World-orchestratorfunctie. Met deze voorbeeldorchestrator worden geen taken gepland.
Het kenmerk dat u gebruikt om de trigger te definiëren, is afhankelijk van of u uw C#-functies uitvoert in hetzelfde proces als het Functions-hostproces of in een geïsoleerd werkproces.
[FunctionName("HelloWorld")]
public static string RunOrchestrator([OrchestrationTrigger] IDurableOrchestrationContext context)
{
string name = context.GetInput<string>();
return $"Hello {name}!";
}
Opmerking
De voorgaande code is voor Durable Functions 2.x. Voor Durable Functions 1.x moet u DurableOrchestrationContext in plaats van IDurableOrchestrationContext gebruiken. Zie het overzicht van Durable Functions-versies voor meer informatie over de verschillen tussen versies.
const { app } = require('@azure/functions');
const df = require('durable-functions');
df.app.orchestration('helloOrchestrator', function* (context) {
const name = context.df.getInput();
return `Hello ${name}`;
});
Opmerking
De durable-functions bibliotheek roept de synchrone methode aan context.done 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. De volgende code bevat een Hello World-voorbeeld dat laat zien hoe u een activiteitsfunctie aanroept:
[FunctionName("HelloWorld")]
public static async Task<string> RunOrchestrator(
[OrchestrationTrigger] IDurableOrchestrationContext context)
{
string name = context.GetInput<string>();
string result = await context.CallActivityAsync<string>("SayHello", name);
return result;
}
Opmerking
De voorgaande code is voor Durable Functions 2.x. Voor Durable Functions 1.x moet u DurableOrchestrationContext in plaats van IDurableOrchestrationContext gebruiken. Zie het overzicht van Durable Functions-versies voor meer informatie over de verschillen tussen versies.
const { app } = require('@azure/functions');
const df = require('durable-functions');
const activityName = 'hello';
df.app.orchestration('helloOrchestrator', function* (context) {
const name = context.df.getInput();
const result = yield context.df.callActivity(activityName, 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;
}
Trigger voor activiteit
U kunt de activiteitstrigger gebruiken om functies te ontwikkelen die ook wel activiteitsfuncties worden genoemd die worden aangeroepen door orchestratorfuncties.
U gebruikt het kenmerk ActivityTriggerAttribute .NET om de activiteitstrigger te configureren.
U gebruikt de @DurableActivityTrigger aantekening om de activiteitstrigger te configureren.
Als u de activiteitsfunctie wilt registreren, importeert u het app object uit de @azure/functions npm module. Vervolgens roept u de methode van de app.activity Durable Functions-API rechtstreeks aan in uw functiecode.
Als u de activiteitstrigger wilt definiëren, gebruikt u het volgende JSON-object in de bindings matrix van function.json:
{
"name": "<name-of-input-parameter-in-function-signature>",
"activity": "<optional-name-of-activity>",
"type": "activityTrigger",
"direction": "in"
}
De activity waarde 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 u deze niet opgeeft, wordt de naam van de functie gebruikt.
U kunt een activiteitstrigger definiëren met behulp van de activity_trigger decorator rechtstreeks in uw Python-functiecode.
Intern zorgt deze triggerbinding ervoor dat de geconfigureerde duurzame opslag wordt gecontroleerd op nieuwe gebeurtenissen van de uitvoering van activiteiten.
Triggergedrag
Hier volgen enkele opmerkingen over de activiteitstrigger:
- Threading: In tegenstelling tot de orkestratie-trigger hebben activiteitstriggers geen beperkingen voor threading- of I/O-bewerkingen. Ze kunnen worden behandeld als normale functies.
- Afhandeling van gifberichten: er is geen ondersteuning voor gifberichten in activiteitstriggers.
- Zichtbaarheid van berichten: berichten van 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 actief en gezond is.
- Retourwaarden: Retourwaarden worden geserialiseerd naar JSON en blijven behouden in het geconfigureerde duurzame archief.
Triggergebruik
De activiteitstriggerbinding ondersteunt zowel invoer als uitvoer, net zoals de orchestrationtrigger. Hier volgen enkele opmerkingen over de verwerking van invoer en uitvoer:
- Invoer: Activiteitstriggers kunnen worden aangeroepen met invoer van een orchestratorfunctie. Alle invoer moet JSON-serializeerbaar zijn.
- Uitvoer: Activiteitsfuncties ondersteunen zowel uitvoer- als invoerwaarden. De retourwaarde van de functie wordt gebruikt om de uitvoerwaarde toe te wijzen en moet JSON-serializeerbaar zijn.
-
Metagegevens: .NET-activiteitsfuncties kunnen aan een
string instanceIdparameter worden gebonden om de exemplaar-id van de aanroepende orkestratie op te halen.
Triggervoorbeeld
De volgende code bevat een voorbeeld van een eenvoudige Hallo wereld-activiteitsfunctie.
[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 1.x). Triggers voor .NET-activiteiten ondersteunen echter ook bindingen rechtstreeks met JSON-serializebare typen (inclusief primitieve typen), zodat u ook de volgende vereenvoudigde versie van de functie kunt gebruiken:
[FunctionName("SayHello")]
public static string SayHello([ActivityTrigger] string name)
{
return $"Hello {name}!";
}
const { app } = require('@azure/functions');
const df = require('durable-functions');
const activityName = 'hello';
df.app.activity(activityName, {
handler: (input) => {
return `Hello, ${input}`;
},
});
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
Naast de activiteitstriggerbinding kunt u ook reguliere invoer- en uitvoerbindingen gebruiken.
Een activiteitsfunctie kan bijvoorbeeld invoer ontvangen van een orchestratorfunctie. De activiteitsfunctie kan die invoer vervolgens verzenden als een bericht naar Azure Event Hubs.
const { app } = require('@azure/functions');
const df = require('durable-functions');
df.app.orchestration('helloOrchestrator', function* (context) {
const input = context.df.getInput();
yield context.df.callActivity('sendToEventHub', input);
return `Message sent: ${input}`;
});
const { EventHubProducerClient } = require("@azure/event-hubs");
const connectionString = process.env.EVENT_HUB_CONNECTION_STRING;
const eventHubName = process.env.EVENT_HUB_NAME;
df.app.activity("sendToEventHub", {
handler: async (message, context) => {
const producer = new EventHubProducerClient(connectionString, eventHubName);
try {
const batch = await producer.createBatch();
batch.tryAdd({ body: message });
await producer.sendBatch(batch);
context.log(`Message sent to Event Hubs: ${message}`);
} catch (err) {
context.log.error("Failed to send message to Event Hubs:", err);
throw err;
} finally {
await producer.close();
}
},
});
app.storageQueue('helloQueueStart', {
queueName: 'start-orchestration',
extraInputs: [df.input.durableClient()],
handler: async (message, context) => {
const client = df.getClient(context);
const orchestratorName = message.orchestratorName || 'helloOrchestrator';
const input = message.input || null;
const instanceId = await client.startNew(orchestratorName, { input });
context.log(`Started orchestration with ID = '${instanceId}'`);
},
});
Orkestratieclient
U kunt de orchestration-clientbinding gebruiken om functies te schrijven die communiceren met orchestratorfuncties. Deze functies worden vaak clientfuncties genoemd. U kunt bijvoorbeeld op de volgende manieren handelen met betrekking tot orkestratie-instanties:
- Start ze.
- Voer een query uit op hun status.
- Beëindig ze.
- Verzend gebeurtenissen naar hen terwijl zij actief zijn.
- Verwijder de exemplaargeschiedenis.
U kunt binden aan een orkestratieclient met behulp van het kenmerk DurableClientAttribute (OrchestrationClientAttribute in Durable Functions 1.x).
U kunt verbinding maken met een orchestratieclient met behulp van de @DurableClientInput annotatie.
Als u de clientfunctie wilt registreren, importeert u het app object uit de @azure/functions npm module. Vervolgens roept u een Durable Functions-API-methode aan die specifiek is voor uw triggertype. Voor een HTTP-trigger roept u bijvoorbeeld de app.http methode aan. Voor een wachtrijtrigger roept u de app.storageQueue methode aan.
Als u de duurzame clienttrigger wilt definiëren, gebruikt u het volgende JSON-object in de bindings matrix van function.json:
{
"name": "<name-of-input-parameter-in-function-signature>",
"taskHub": "<optional-name-of-task-hub>",
"connectionName": "<optional-name-of-connection-string-app-setting>",
"type": "orchestrationClient",
"direction": "in"
}
- De
taskHubeigenschap wordt gebruikt wanneer meerdere functie-apps hetzelfde opslagaccount delen, maar van elkaar moeten worden geïsoleerd. Als u deze eigenschap niet opgeeft, wordt de standaardwaarde van host.json gebruikt. Deze waarde moet overeenkomen met de waarde die de doelorchestratorfuncties gebruiken. - De
connectionNamewaarde is de naam van een app-instelling die een verbindingsreeks voor een opslagaccount bevat. Het opslagaccount dat wordt vertegenwoordigd door deze verbindingsreeks moet hetzelfde zijn als dat van de doel-orkestratiefuncties. Als u deze eigenschap niet opgeeft, wordt voor de functie-app de standaard verbindingsreeks voor het opslagaccount gebruikt.
Opmerking
In de meeste gevallen raden we u aan deze eigenschappen weg te laten en te vertrouwen op het standaardgedrag.
U kunt een duurzame clienttrigger definiëren met behulp van de durable_client_input decorator rechtstreeks in uw Python-functiecode.
Clientgebruik
Doorgaans verbindt u zich met een implementatie van IDurableClient (DurableOrchestrationClient in Durable Functions 1.x), waarmee u volledige toegang krijgt tot alle orchestration-client-API's die Durable Functions ondersteunt.
Normaal gesproken bindt u aan de DurableClientContext klas.
U moet de taalspecifieke SDK gebruiken om toegang te krijgen tot een clientobject.
De volgende code bevat een voorbeeld van een door een wachtrij geactiveerde functie waarmee een Hello World orkestratie 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);
}
Opmerking
De voorgaande C#-code is voor Durable Functions 2.x. Voor Durable Functions 1.x moet u het OrchestrationClient kenmerk gebruiken in plaats van het DurableClient kenmerk en moet u het DurableOrchestrationClient parametertype gebruiken in plaats van IDurableOrchestrationClient. Zie het overzicht van Durable Functions-versies voor meer informatie over de verschillen tussen versies.
const { app } = require('@azure/functions');
const df = require('durable-functions');
app.storageQueue('helloQueueStart', {
queueName: 'start-orchestration',
extraInputs: [df.input.durableClient()],
handler: async (message, context) => {
const client = df.getClient(context);
const orchestratorName = message.orchestratorName || 'helloOrchestrator';
const input = message.input || null;
const instanceId = await client.startNew(orchestratorName, { input });
context.log(`Started orchestration with ID = '${instanceId}' from queue message.`);
},
});
import azure.functions as func
import azure.durable_functions as df
myApp = df.DFApp(http_auth_level=func.AuthLevel.ANONYMOUS)
@myApp.queue_trigger(
arg_name="msg",
queue_name="start-orchestration",
connection="AzureWebJobsStorage"
)
@myApp.durable_client_input(client_name="client")
async def client_function(msg: func.QueueMessage, client: df.DurableOrchestrationClient):
input_data = msg.get_body().decode("utf-8")
await client.start_new("my_orchestrator", None, input_data)
return None
function.json
{
"bindings": [
{
"name": "InputData",
"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);
}
Zie Exemplaren beheren in Durable Functions in Azure voor gedetailleerde informatie over het starten van exemplaren.
Entiteitstrigger
U kunt de entiteitstrigger gebruiken om een entiteitsfunctie te ontwikkelen. Deze trigger ondersteunt het verwerken van gebeurtenissen voor een specifiek entiteitsexemplaar.
Opmerking
Entiteitstriggers zijn beschikbaar vanaf Durable Functions 2.x.
Intern controleert deze triggerbinding de geconfigureerde persistente opslag op nieuwe entiteitshandelingen die moeten worden uitgevoerd.
U gebruikt het kenmerk EntityTriggerAttribute .NET om de entiteitstrigger te configureren.
Als u de entiteitstrigger wilt registreren, importeert u het app object uit de @azure/functions npm module. Vervolgens roept u de methode van de app.entity Durable Functions-API rechtstreeks aan in uw functiecode.
const df = require('durable-functions');
df.app.entity('counter', (context) => {
const currentValue = context.df.getState(() => 0);
switch (context.df.operationName) {
case 'add':
context.df.setState(currentValue + context.df.getInput());
break;
case 'reset':
context.df.setState(0);
break;
case 'get':
context.df.return(currentValue);
break;
}
});
Opmerking
Entiteitstriggers worden nog niet ondersteund voor Java.
Opmerking
Entiteitstriggers worden nog niet ondersteund voor PowerShell.
U kunt een entiteitstrigger definiëren met behulp van de entity_trigger decorator rechtstreeks in uw Python-functiecode.
Triggergedrag
Hier volgen enkele opmerkingen over de entiteitstrigger:
- Single-threading: een enkele dispatcher-thread 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: Entiteitstriggerberichten worden uit de wachtrij gehaald en onzichtbaar gemaakt voor een configureerbare duur. De zichtbaarheid van deze berichten wordt automatisch vernieuwd zolang de functie-app actief en gezond is.
- Retourwaarden: Entiteitsfuncties bieden geen ondersteuning voor retourwaarden. Er zijn specifieke API's die u kunt gebruiken om de status op te slaan of waarden terug te geven aan orkestraties.
Alle statuswijzigingen die tijdens de uitvoering zijn aangebracht in een entiteit, worden automatisch behouden nadat de uitvoering is voltooid.
Zie Entiteitsfuncties voor meer informatie en voorbeelden van het definiëren en gebruiken van entiteitstriggers.
Entiteitsclient
U kunt de entiteitsclientbinding gebruiken om asynchroon entiteitsfuncties te activeren. Deze functies worden soms clientfuncties genoemd.
U kunt verbinding maken met de entiteitsclient met behulp van het . NET-kenmerk DurableClientAttribute in .NET-klassebibliotheekfuncties.
Opmerking
U kunt ook de [DurableClientAttribute] gebruiken om verbinding te maken met de orchestration client.
In plaats van een entiteitsclient te registreren, gebruikt u signalEntity of callEntity om een entiteitstriggermethode aan te roepen vanuit een geregistreerde functie.
Vanuit een door een wachtrij geactiveerde functie kunt u het volgende gebruiken
client.signalEntity:const { app } = require('@azure/functions'); const df = require('durable-functions'); app.storageQueue('helloQueueStart', { queueName: 'start-orchestration', extraInputs: [df.input.durableClient()], handler: async (message, context) => { const client = df.getClient(context); const entityId = new df.EntityId('counter', 'myCounter'); await client.signalEntity(entityId, 'add', 5); }, });Vanuit een orchestratorfunctie kunt u het volgende gebruiken
context.df.callEntity:const { app } = require('@azure/functions'); const df = require('durable-functions'); df.app.orchestration('entityCaller', function* (context) { const entityId = new df.EntityId('counter', 'myCounter'); yield context.df.callEntity(entityId, 'add', 5); yield context.df.callEntity(entityId, 'add', 5); const result = yield context.df.callEntity(entityId, 'get'); return result; });
U kunt een entiteitsclient definiëren met behulp van de durable_client_input decorator rechtstreeks in uw Python-functiecode.
Opmerking
Entiteitsclients worden nog niet ondersteund voor Java.
Opmerking
Entiteitsclients worden nog niet ondersteund voor PowerShell.
Zie Access-entiteiten voor meer informatie en voorbeelden van interactie met entiteiten als een client.
Durable Functions-instellingen in host.json
Deze sectie bevat informatie over de Durable Functions-configuratie-eigenschappen in host.json. Zie host.json referentie voor Azure Functions 1.x of host.json voor Azure Functions 2.x en hoger voor informatie over algemene instellingen in host.json.
Configuratie-instellingen voor Durable Functions.
Opmerking
Alle belangrijke versies van Durable Functions worden ondersteund in alle versies van de Azure Functions-runtime. Het schema van de host.json-configuratie verschilt echter enigszins, afhankelijk van de versie van de Azure Functions-runtime en de versie van de Durable Functions-extensie die u gebruikt.
De volgende code bevat twee voorbeelden van durableTask instellingen in host.json: één voor Durable Functions 2.x en één voor Durable Functions 1.x. U kunt beide voorbeelden gebruiken met Azure Functions 2.0 en 3.0. Met Azure Functions 1.0 zijn de beschikbare instellingen hetzelfde, maar de durableTask sectie van host.json bevindt zich in de hoofdmap van de host.json-configuratie in plaats van een veld onder extensions.
{
"extensions": {
"durableTask": {
"hubName": "MyTaskHub",
"defaultVersion": "1.0",
"versionMatchStrategy": "CurrentOrOlder",
"versionFailureStrategy": "Reject",
"storageProvider": {
"connectionStringName": "AzureWebJobsStorage",
"controlQueueBatchSize": 32,
"controlQueueBufferThreshold": 256,
"controlQueueVisibilityTimeout": "00:05:00",
"FetchLargeMessagesAutomatically": true,
"maxQueuePollingInterval": "00:00:30",
"partitionCount": 4,
"trackingStoreConnectionStringName": "TrackingStorage",
"trackingStoreNamePrefix": "DurableTask",
"useLegacyPartitionManagement": false,
"useTablePartitionManagement": true,
"workItemQueueVisibilityTimeout": "00:05:00",
"QueueClientMessageEncoding": "UTF8"
},
"tracing": {
"traceInputsAndOutputs": false,
"traceReplayEvents": false,
},
"httpSettings":{
"defaultAsyncRequestSleepTimeMilliseconds": 30000,
"useForwardedHost": 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,
"maxConcurrentEntityFunctions": 10,
"extendedSessionsEnabled": false,
"extendedSessionIdleTimeoutInSeconds": 30,
"useAppLease": true,
"useGracefulShutdown": false,
"maxEntityOperationBatchSize": 50,
"maxOrchestrationActions": 100000,
"storeInputsInOrchestrationHistory": false
}
}
}
| Vastgoed | Standaardwaarde | Beschrijving |
|---|---|---|
| hubNaam | TestHubName (DurableFunctionsHub in v1.x) | De naam van de hub waarin de huidige status van een functie-app wordt opgeslagen. Namen van taakhubs moeten beginnen met een letter en mogen alleen letters en cijfers bevatten. Als u geen naam opgeeft, wordt de standaardwaarde gebruikt. Alternatieve namen van taakhubs kunnen worden gebruikt om meerdere Durable Functions-toepassingen van elkaar te isoleren, zelfs als ze dezelfde back-end voor opslag gebruiken. Zie voor meer informatie Taakhubs. |
| standaardversie | De standaardversie die wordt toegewezen aan nieuwe orkestratie-exemplaren. Wanneer u een versie opgeeft, worden nieuwe orkestratie-exemplaren permanent gekoppeld aan deze versiewaarde. Deze instelling wordt gebruikt door de orchestratie versiebeheer om scenario's zoals implementaties zonder downtime mogelijk te maken met ingrijpende wijzigingen. U kunt elke tekenreekswaarde voor de versie gebruiken. | |
| versieMatchStrategie | CurrentOrOlder | Een waarde die aangeeft hoe orkestratieversies overeenkomen wanneer orchestrator-functies worden geladen. Geldige waarden zijn None, Stricten CurrentOrOlder. Zie Orchestration-versiebeheer voor gedetailleerde uitleg. |
| versieFalenStrategie | Verwerpen | Een waarde die aangeeft wat er gebeurt wanneer een orchestratieversie niet overeenkomt met de huidige defaultVersion waarde. Geldige waarden zijn Reject en Fail. Zie Orchestration-versiebeheer voor gedetailleerde uitleg. |
| controlQueueBatchSize | 32 | Het aantal berichten dat tegelijkertijd moet worden opgehaald uit de controlewachtrij. |
| bufferdrempel voor de controlewachtrij |
Verbruiksabonnement voor Python: 32 Verbruiksabonnement voor andere talen: 128 Toegewezen of Premium-abonnement: 256 |
Het aantal control queue-berichten dat tegelijkertijd in het geheugen kan worden gebufferd. Wanneer het opgegeven nummer is bereikt, wacht de dispatcher voordat andere berichten worden weergegeven. In sommige situaties kan het verminderen van deze waarde het geheugenverbruik aanzienlijk verminderen. |
| aantal partities | 4 | Het aantal partities voor de controlewachtrij. Deze waarde moet een positief geheel getal tussen 1 en 16 zijn. Als u deze waarde wijzigt, moet u een nieuwe taakhub configureren. |
| controlQueueVisibilityTimeout (beheertekenreeks voor zichtbaarheidstijd) | 00:05:00 | De time-out voor de zichtbaarheid van berichten in de controlewachtrij in de indeling uu:mm:ss. |
| werkItemWachtrijZichtbaarheidTimeout | 00:05:00 | De zichtbaarheidstime-out van werkqueue-berichten in de indeling uu:mm:ss. |
| HaalGroteBerichtenAutomatischOp | waar | Een waarde die aangeeft of grote berichten moeten worden opgehaald in orkestratiestatusquery's. Wanneer deze instelling is true, worden grote berichten die de limiet voor de wachtrijgrootte overschrijden, opgehaald. Wanneer deze instelling is false, wordt een blob-URL opgehaald die verwijst naar elk groot bericht. |
| maximale gelijktijdige activiteitsfuncties |
Verbruiksplan: 10 Toegewezen of Premium-abonnement: 10 keer 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 Toegewezen of Premium-abonnement: 10 keer het aantal processors op de huidige computer |
Het maximale aantal orchestratorfuncties dat tegelijkertijd kan worden verwerkt op één exemplaar van een host. |
| Maximale gelijktijdige entiteitsfuncties |
Verbruiksabonnement: 5 Toegewezen of Premium-abonnement: 10 keer het aantal processors op de huidige computer |
Het maximum aantal entiteitsfuncties dat gelijktijdig kan worden verwerkt op één hostexemplaar. Deze instelling is alleen van toepassing wanneer u de duurzame taakplanner gebruikt. Anders is het maximum aantal gelijktijdige entiteitsuitvoeringen beperkt tot de maxConcurrentOrchestratorFunctions waarde. |
| maxQueuePollingInterval | 00:00:30 | Het maximale polling-interval voor de 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. |
| maxOrchestrationActions | 100,000 | Het maximum aantal acties dat een orchestratorfunctie kan uitvoeren tijdens één uitvoeringscyclus. |
| connectionName (v2.7.0 en hoger) connectionStringName (v2.x) azureStorageConnectionStringName (v1.x) |
AzureWebJobsOpslag | De naam van een app-instelling of verzameling die aangeeft hoe u verbinding maakt met de onderliggende Azure Storage-resources. Wanneer u één app-instelling opgeeft, moet dit een Azure Storage-verbindingsreeks zijn. |
| trackingStoreConnectionName (v2.7.0 en hoger) trackingStoreConnectionStringNaam |
De naam van een app-instelling of instellingverzameling die aangeeft hoe verbinding moet worden gemaakt met de tabellen Geschiedenis en Exemplaren, waarin de uitvoeringsgeschiedenis en metagegevens over orkestratie-exemplaren worden opgeslagen. Wanneer u één app-instelling opgeeft, moet dit een Azure Storage-verbindingsreeks zijn. Als u geen instelling opgeeft, wordt de connectionStringName waarde (v2.x) of azureStorageConnectionStringName waardeverbinding (v1.x) gebruikt. |
|
| trackingStoreNamePrefix | Het voorvoegsel dat moet worden gebruikt voor de tabellen Geschiedenis en Instanties wanneer trackingStoreConnectionStringName is opgegeven. Als u geen voorvoegsel opgeeft, wordt de standaardwaarde gebruikt DurableTask . Als trackingStoreConnectionStringName niet is opgegeven, gebruiken de tabellen Geschiedenis en Exemplaren de hubName-waarde als prefix en wordt de instelling trackingStoreNamePrefix genegeerd. |
|
| traceerIn- en uitvoer | onwaar | Een waarde die aangeeft of de invoer en uitvoer van functie-aanroepen moeten worden getraceerd. Wanneer de uitvoeringsgebeurtenissen van de functie worden getraceerd, is het standaardgedrag het aantal bytes in de geserialiseerde invoer en uitvoer voor functieaanroepen op te nemen. Dit gedrag biedt minimale informatie over de invoer en uitvoer, zodat deze de logboeken niet opbloat of onbedoeld gevoelige informatie beschikbaar maakt. Wanneer deze eigenschap is true, wordt de volledige inhoud van functie-invoer en -uitvoer vastgelegd. |
| traceReplayEvents | onwaar | Een waarde die aangeeft of gebeurtenissen voor het opnieuw afspelen van orchestration naar Application Insights moeten worden geschreven. |
| logReplayEvents | onwaar | Een waarde die aangeeft of opnieuw afgespeelde uitvoeringen moeten worden geregistreerd in toepassingslogboeken. |
| eventGridTopicEndpoint (eventrasteronderwerpendpunt) | De URL van een eindpunt met aangepast onderwerp van Azure Event Grid. Wanneer u deze eigenschap instelt, worden orkestratielevenscyclusmeldingen naar dit eindpunt gepubliceerd. Deze eigenschap ondersteunt de resolutie van app-instellingen. | |
| EventGridSleutelInstellingNaam | De naam van de app-instelling die de sleutel bevat die wordt gebruikt voor verificatie met het aangepaste Event Grid-onderwerp op de EventGridTopicEndpoint URL. |
|
| aantalHerhalingenPublicerenEventGrid | 0 | Het aantal keren dat u het opnieuw moet proberen als het publiceren naar het Event Grid-onderwerp mislukt. |
| eventGridPubliceerOpnieuwInterval | 00:05:00 | Het publiceer-herhaalinterval van Event Grid in de indeling uu:mm:ss. |
| eventGrid publicatie gebeurtenistypen | Een lijst met gebeurtenistypen die moeten worden gepubliceerd op Event Grid. Als u geen typen opgeeft, worden alle gebeurtenistypen gepubliceerd. Toegestane waarden zijn onder andere Started, Completed, Faileden Terminated. |
|
| extendedSessionsEnabled | onwaar | Een waarde die aangeeft of sessie-orchestrator- en entiteitsfunctiesessies in de cache worden opgeslagen. |
| verlengdeSessieInactiefTijdslimietInSeconden | 30 | Het aantal seconden dat een niet-actieve orchestrator of entiteitsfunctie in het geheugen aanwezig blijft voordat deze wordt verwijderd. Deze instelling wordt alleen gebruikt wanneer de extendedSessionsEnabled instelling is true. |
| useAppLease | waar | Een waarde die aangeeft of apps een blob-lease op app-niveau moeten verkrijgen voordat takenhub-berichten worden verwerkt. Zie Herstel na noodgevallen en geo-distributie in Durable Functions voor meer informatie. Deze instelling is beschikbaar vanaf v2.3.0. |
| gebruikLegacyPartitiebeheer | onwaar | Een waarde die het type algoritme voor partitiebeheer aangeeft dat moet worden gebruikt. Wanneer deze instelling is false, wordt een algoritme gebruikt dat de mogelijkheid van dubbele functie-uitvoering vermindert bij het uitschalen. Deze instelling is beschikbaar vanaf v2.3.0.
Het is niet raadzaam deze waarde in te true stellen. |
| Beheer van tabelpartities gebruiken | In v3.x: waar In v2.x: false |
Een waarde die het type algoritme voor partitiebeheer aangeeft dat moet worden gebruikt. Wanneer deze instelling is trueingesteld, wordt een algoritme gebruikt dat is ontworpen om de kosten voor Azure Storage v2-accounts te verlagen. Deze instelling is beschikbaar vanaf WebJobs.Extensions.DurableTask v2.10.0. Voor het gebruik van deze instelling met een beheerde identiteit is WebJobs.Extensions.DurableTask v3.x of hoger of Worker.Extensions.DurableTask v1.2.x of hoger vereist. |
| GebruikZorgzaamAfsluiten | onwaar | (Preview) Een waarde die aangeeft of er probleemloos moet worden afgesloten om te voorkomen dat hostafsluitingen ervoor zorgen dat functie-uitvoeringen in het proces mislukken. |
| maxEntityOperationBatchSize |
Verbruiksabonnement: 50 Toegewezen of Premium-abonnement: 5.000 |
Het maximum aantal entiteitsbewerkingen dat als batch wordt verwerkt. Als deze waarde 1 is, wordt batchverwerking uitgeschakeld en verwerkt een afzonderlijke functie-aanroep elk bewerkingsbericht. Deze instelling is beschikbaar vanaf v2.6.1. |
| slaInvoerOpInOrchestratiegeschiedenis | onwaar | Een waarde die aangeeft hoe invoer moet worden opgeslagen. Als deze instelling is true, wordt in het Durable Task Framework activiteitsinvoer opgeslagen in de tabel Geschiedenis en verschijnen de invoeren van activiteitsfuncties in queryresultaten voor orkestratiegeschiedenis. |
| maxGrpcMessageSizeInBytes | 4,194,304 | Een geheel getal dat de maximale grootte, in bytes, instelt van berichten die de gRPC-client (Remote Procedure Call) kan ontvangen. De implementatie van DurableTaskClient maakt gebruik van de gRPC-client om orkestratie-instanties te beheren. Deze instelling is van toepassing op Durable Functions .NET geïsoleerde werkrol- en Java-apps. |
| grpcHttpClientTimeout | 00:01:40 | De time-out in de indeling uu:mm:ss voor de HTTP-client die wordt gebruikt door de gRPC-client in Durable Functions. De client wordt momenteel ondersteund voor .NET geïsoleerde werkrol-apps (.NET 6 en latere versies) en voor Java-apps. |
| QueueClientMessageEncoding | UTF8 | De coderingsstrategie voor Azure Queue Storage-berichten. Geldige strategieën zijn Unicode Transformation Format–8-bits (UTF8) en Base64. Deze instelling is van toepassing wanneer u Microsoft.Azure.WebJobs.Extensions.DurableTask 3.4.0 of hoger of Microsoft.Azure.Functions.Worker.Extensions.DurableTask 1.7.0 of hoger gebruikt. |
| defaultAsyncRequestSleepTimeMilliseconds | 30.000 | Het standaard polling-interval, in milliseconden, voor asynchrone HTTP-API's. Wanneer een client de status van een langlopende orchestratie peilt met behulp van het HTTP-statusquery-eindpunt, bepaalt deze waarde hoe lang de client moet wachten voordat opnieuw gepolld wordt. |
| useForwardedHost | onwaar | Als deze is ingesteld op true, gebruikt de extensie de headers X-Forwarded-Host en X-Forwarded-Proto om URL's in HTTP-antwoorden te maken. |
Veel van deze instellingen zijn voor het optimaliseren van de prestaties. Zie Prestaties en schaal voor meer informatie.