Not
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Tillägget Durable Functions introducerar tre utlösarbindningar som styr körningen av orkestrerings-, entitets- och aktivitetsfunktioner. Den introducerar också en utdatabindning som fungerar som en klient för Durable Functions-körningen.
Den här artikeln beskriver användningen av dessa fyra bindningar och innehåller kodexempel. Den innehåller också information om durable functions-konfigurationsegenskaperna i host.json, metadatafilen som innehåller inställningar som påverkar alla funktioner i en funktionsapp.
Se till att välja ditt Durable Functions-utvecklingsspråk överst i artikeln.
Båda versionerna av Python-programmeringsmodellen för Azure Functions stöds av Durable Functions. Eftersom Python v2 är den rekommenderade versionen innehåller exemplen i den här artikeln exklusivt den här versionen.
Förutsättningar
- Durable Functions SDK, som är Python Package Index-paketet
azure-functions-durable(PyPI), version1.2.2eller senare version - Tilläggspaketversion 4.x (eller en senare version), som anges i host.json-projektfilen
Du kan ge feedback och förslag i Durable Functions SDK för Python-lagringsplatsen.
Orkestreringsutlösare
Du kan använda orkestreringsutlösaren för att utveckla hållbara orkestreringsfunktioner. Den här utlösaren körs när en ny orkestreringsinstans schemaläggs och när en befintlig orkestreringsinstans tar emot en händelse. Exempel på händelser som kan utlösa orkestreringsfunktioner är varaktiga timerförfallodatum, aktivitetsfunktionssvar och händelser som genereras av externa klienter.
När du utvecklar funktioner i .NET använder du attributet OrchestrationTriggerAttribute .NET för att konfigurera orkestreringsutlösaren.
För Java använder du anteckningen @DurableOrchestrationTrigger för att konfigurera orkestreringsutlösaren.
När du använder version 4 av Node.js programmeringsmodell för att utveckla funktioner importerar app du objektet från modulen @azure/functions npm . Sedan anropar du metoden för app.orchestration Durable Functions-API:et direkt i funktionskoden. Den här metoden registrerar orkestreringsfunktionen med Durable Functions-ramverket.
När du skriver orkestreringsfunktioner definierar du orkestreringsutlösaren med hjälp av följande JSON-objekt i matrisen bindings för function.json-filen :
{
"name": "<name-of-input-parameter-in-function-signature>",
"orchestration": "<optional-name-of-orchestration>",
"type": "orchestrationTrigger",
"direction": "in"
}
Värdet orchestration är namnet på orkestreringen som klienter måste använda när de vill starta nya instanser av orchestrator-funktionen. Den här egenskapen är valfri. Om du inte anger det används namnet på funktionen.
När du använder python v2-programmeringsmodellen kan du definiera en orkestreringsutlösare med hjälp av dekoratören orchestration_trigger direkt i python-funktionskoden.
I v2-modellen får du åtkomst till Durable Functions-utlösare och bindningar från en instans av DFApp. Du kan använda den här underklassen FunctionApp för att exportera dekoratörer som är specifika för Durable Functions.
Internt avsöker den här utlösarbindningen det konfigurerade varaktiga arkivet för nya orkestreringshändelser. Exempel på händelser är orkestreringsstarthändelser, varaktiga timer-förfallohändelser, aktivitetsfunktionssvarshändelser och externa händelser som genereras av andra funktioner.
Utlösarbeteende
Här följer några kommentarer om orkestreringsutlösaren:
- Enkeltrådning: En enda dispatcher-tråd används för all orchestrator-funktionskörning på en enda värdinstans. Därför är det viktigt att se till att orchestrator-funktionskoden är effektiv och inte utför några I/O-åtgärder. Det är också viktigt att se till att den här tråden inte utför något asynkront arbete förutom när du väntar på aktivitetstyper som är specifika för Durable Functions.
- Hantering av giftmeddelanden: Det finns inget stöd för giftmeddelanden i orkestreringsutlösare.
- Meddelandesynlighet: Orkestreringsutlösare tas bort och hålls osynliga under en konfigurerbar varaktighet. Synligheten för dessa meddelanden förnyas automatiskt så länge funktionsappen körs och är felfri.
- Returvärden: Returvärden serialiseras till JSON och sparas i orkestreringshistoriktabellen i Azure Table Storage. Dessa returvärden kan efterfrågas av orkestreringsklientbindningen, som beskrivs senare.
Varning
Orchestrator-funktioner bör aldrig använda några andra indata- eller utdatabindningar än orkestreringsutlösarbindningen. Användning av andra bindningar kan orsaka problem med tillägget Durable Task, eftersom dessa bindningar kanske inte följer reglerna för enkel trådning och I/O. Om du vill använda andra bindningar lägger du till dem i en aktivitetsfunktion som anropas från orkestreringsfunktionen. Mer information om kodningsbegränsningar för orkestreringsfunktioner finns i Begränsningar för orchestrator-funktionskod.
Varning
Orchestrator-funktioner bör aldrig deklareras async.
Användning av utlösare
Orkestreringsutlösarbindningen stöder både indata och utdata. Här följer några kommentarer om hantering av indata och utdata:
- Indata: Du kan anropa orkestreringsutlösare som har indata. Indata nås via kontextindataobjektet. Alla indata måste vara JSON-serialiserbara.
- Utdata: Orkestreringsutlösare stöder både utdata- och indatavärden. Returvärdet för funktionen används för att tilldela utdatavärdet. Returvärdet måste vara JSON-serialiserbart.
Utlösarexempel
Följande kod innehåller ett exempel på en grundläggande Hello World-orkestreringsfunktion. I det här exemplet schemalägger inte orkestreraren några uppgifter.
Attributet som du använder för att definiera utlösaren beror på om du kör C#-funktionerna i samma process som Functions-värdprocessen eller i en isolerad arbetsprocess.
[FunctionName("HelloWorld")]
public static string RunOrchestrator([OrchestrationTrigger] IDurableOrchestrationContext context)
{
string name = context.GetInput<string>();
return $"Hello {name}!";
}
Anmärkning
Föregående kod är för Durable Functions 2.x. För Durable Functions 1.x måste du använda DurableOrchestrationContext i stället för IDurableOrchestrationContext. Mer information om skillnaderna mellan versioner finns i Översikt över Durable Functions-versioner.
const { app } = require('@azure/functions');
const df = require('durable-functions');
df.app.orchestration('helloOrchestrator', function* (context) {
const name = context.df.getInput();
return `Hello ${name}`;
});
Anmärkning
Biblioteket durable-functions anropar den synkrona context.done metoden när generatorfunktionen avslutas.
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 flesta orkestreringsfunktioner anropar aktivitetsfunktioner. Följande kod innehåller ett Hello World-exempel som visar hur du anropar en aktivitetsfunktion:
[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;
}
Anmärkning
Föregående kod är för Durable Functions 2.x. För Durable Functions 1.x måste du använda DurableOrchestrationContext i stället för IDurableOrchestrationContext. Mer information om skillnaderna mellan versioner finns i Översikt över Durable Functions-versioner.
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;
}
Aktivitetsutlösare
Du kan använda aktivitetsutlösaren för att utveckla funktioner som kallas aktivitetsfunktioner som anropas av orkestreringsfunktioner.
Du använder attributet ActivityTriggerAttribute .NET för att konfigurera aktivitetsutlösaren.
Du använder anteckningen @DurableActivityTrigger för att konfigurera aktivitetsutlösaren.
Importera objektet app från modulen @azure/functions npm för att registrera din aktivitetsfunktion. Sedan anropar du metoden för app.activity Durable Functions-API:et direkt i funktionskoden.
Om du vill definiera aktivitetsutlösaren använder du följande JSON-objekt i matrisen bindings förfunction.json:
{
"name": "<name-of-input-parameter-in-function-signature>",
"activity": "<optional-name-of-activity>",
"type": "activityTrigger",
"direction": "in"
}
Värdet activity är namnet på aktiviteten. Det här värdet är det namn som orchestrator-funktioner använder för att anropa den här aktivitetsfunktionen. Den här egenskapen är valfri. Om du inte anger det används namnet på funktionen.
Du kan definiera en aktivitetsutlösare med hjälp av dekoratören activity_trigger direkt i python-funktionskoden.
Internt kontrollerar den här utlösarbindningen det konfigurerade varaktiga lagret för nya aktivitetsutförandehändelser.
Utlösarbeteende
Här följer några kommentarer om aktivitetsutlösaren:
- Trådning: Till skillnad från orkestreringsutlösaren har aktivitetsutlösare inga begränsningar för trådning eller I/O-åtgärder. De kan behandlas som vanliga funktioner.
- Hantering av giftmeddelanden: Det finns inget stöd för giftmeddelanden i aktivitetsutlösare.
- Meddelandesynlighet: Aktivitetsutlösarmedelanden tas ur kö och förvaras osynliga under en konfigurerbar varaktighet. Synligheten för dessa meddelanden förnyas automatiskt så länge funktionsappen körs och är felfri.
- Returvärden: Returvärden serialiseras till JSON och sparas i det konfigurerade varaktiga arkivet.
Användning av utlösare
Aktivitetsutlösarbindningen stöder både indata och utdata, precis som orkestreringsutlösaren. Här följer några kommentarer om hantering av indata och utdata:
- Indata: Aktivitetsutlösare kan anropas med indata från en orchestrator-funktion. Alla indata måste vara JSON-serialiserbara.
- Utdata: Aktivitetsfunktioner stöder både utdata- och indatavärden. Returvärdet för funktionen används för att tilldela utdatavärdet och måste vara JSON-serializable.
-
Metadata: .NET-aktivitetsfunktioner kan binda till en
string instanceIdparameter för att hämta instans-ID:t för den anropande orkestreringen.
Utlösarexempel
Följande kod innehåller ett exempel på en grundläggande Hello World-aktivitetsfunktion .
[FunctionName("SayHello")]
public static string SayHello([ActivityTrigger] IDurableActivityContext helloContext)
{
string name = helloContext.GetInput<string>();
return $"Hello {name}!";
}
Standardparametertypen för .NET-bindningen ActivityTriggerAttribute är IDurableActivityContext (eller DurableActivityContext för Durable Functions 1.x). .NET-aktivitetsutlösare stöder dock även bindning direkt till JSON-serialiserande typer (inklusive primitiva typer), så du kan också använda följande förenklade version av funktionen:
[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);
}
Använda indata- och utdatabindningar
Förutom aktivitetsutlösarbindningen kan du också använda vanliga indata- och utdatabindningar.
En aktivitetsfunktion kan till exempel ta emot indata från en orchestrator-funktion. Aktivitetsfunktionen kan sedan skicka indata som ett meddelande till 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}'`);
},
});
Orkestreringsklient
Du kan använda orkestreringsklientbindningen för att skriva funktioner som interagerar med orkestreringsfunktioner. Dessa funktioner kallas ofta för klientfunktioner. Du kan till exempel hantera orkestreringsinstanser på följande sätt:
- Sätt igång dem.
- Fråga efter deras status.
- Avsluta dem.
- Skicka händelser till dem medan de är igång.
- Rensa instanshistoriken.
Du kan binda till en orkestreringsklient med attributet DurableClientAttribute (OrchestrationClientAttribute i Durable Functions 1.x).
Du kan binda till en orkestreringsklient med hjälp av anteckningen @DurableClientInput .
Om du vill registrera din klientfunktion importerar du app-objektet från @azure/functions npm-modulen. Sedan anropar du en Durable Functions API-metod som är specifik för din utlösartyp. För en HTTP-utlösare anropar man till exempel metoden app.http. För en köutlösare anropar du app.storageQueue-metoden.
Om du vill definiera den varaktiga klientutlösaren använder du följande JSON-objekt i matrisen bindings förfunction.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"
}
- Egenskapen
taskHubanvänds när flera funktionsappar delar samma lagringskonto men måste isoleras från varandra. Om du inte anger den här egenskapen används standardvärdet från host.json . Det här värdet måste matcha värdet som målorkestreringsfunktionerna använder. - Värdet
connectionNameär namnet på en appinställning som innehåller en anslutningssträng för lagringskontot. Lagringskontot som representeras av den här anslutningssträngen måste vara samma som målorkestreringsfunktionerna använder. Om du inte anger den här egenskapen används standardanslutningssträngen för lagringskontot för funktionsappen.
Anmärkning
I de flesta fall rekommenderar vi att du utelämnar dessa egenskaper och förlitar dig på standardbeteendet.
Du kan definiera en varaktig klientutlösare med hjälp av dekoratören durable_client_input direkt i python-funktionskoden.
Kundanvändning
Du binder vanligtvis till en implementering av IDurableClient (DurableOrchestrationClient i Durable Functions 1.x), vilket ger dig fullständig åtkomst till alla orkestreringsklient-API:er som Durable Functions stöder.
Du binder vanligtvis till DurableClientContext klassen.
Du måste använda det språkspecifika SDK:et för att få åtkomst till ett klientobjekt.
Följande kod innehåller ett exempel på en kö-baserad funktion som startar en Hello World-orkestrering.
[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);
}
Anmärkning
Föregående C#-kod är för Durable Functions 2.x. För Durable Functions 1.x måste du använda OrchestrationClient attributet i stället för DurableClient attributet och du måste använda DurableOrchestrationClient parametertypen i stället för IDurableOrchestrationClient. Mer information om skillnaderna mellan versioner finns i Översikt över Durable Functions-versioner.
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);
}
Detaljerad information om hur du startar instanser finns i Hantera instanser i Durable Functions i Azure.
Entitetsutlösare
Du kan använda entitetsutlösaren för att utveckla en entitetsfunktion. Den här utlösaren stöder bearbetning av händelser för en specifik entitetsinstans.
Anmärkning
Entitetsutlösare är tillgängliga från och med Durable Functions 2.x.
Inom systemet söker den här utlösarbindningen kontinuerligt i det konfigurerade varaktighetslagret efter nya entitetsoperationer som behöver köras.
Du använder attributet EntityTriggerAttribute .NET för att konfigurera entitetsutlösaren.
För att registrera entitetsutlösaren importerar du objektet app från modulen @azure/functions npm. Sedan anropar du metoden för app.entity Durable Functions-API:et direkt i funktionskoden.
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;
}
});
Anmärkning
Entitetsutlösare stöds ännu inte för Java.
Anmärkning
Entitetsutlösare stöds ännu inte för PowerShell.
Du kan definiera en entitetsutlösare med hjälp av dekoratören entity_trigger direkt i python-funktionskoden.
Utlösarbeteende
Här följer några kommentarer om entitetsutlösaren:
- Enkeltrådning: En enda dispatcher-tråd används för att bearbeta åtgärder för en viss entitet. Om flera meddelanden skickas till en enda entitet samtidigt bearbetas åtgärderna en i taget.
- Hantering av giftmeddelanden: Det finns inget stöd för giftmeddelanden i entitetsutlösare.
- Meddelandesynlighet: Entitetsutlösare tas bort och hålls osynliga under en konfigurerbar varaktighet. Synligheten för dessa meddelanden förnyas automatiskt så länge funktionsappen körs och är felfri.
- Returvärden: Entitetsfunktioner stöder inte returvärden. Det finns specifika API:er som du kan använda för att spara tillstånd eller skicka tillbaka värden till orkestreringar.
Tillståndsändringar som görs i en entitet under körningen lagras automatiskt efter att körningen är avslutad.
Mer information och exempel på hur du definierar och interagerar med entitetsutlösare finns i Entitetsfunktioner.
Entitetsklient
Du kan använda entitetsklientbindningen för att asynkront utlösa entitetsfunktioner. Dessa funktioner kallas ibland för klientfunktioner.
Du kan binda till entitetsklienten med hjälp av attributet DurableClientAttribute .NET i .NET-klassbiblioteksfunktioner.
Anmärkning
Du kan också använda [DurableClientAttribute] för att binda till orkestreringsklienten.
I stället för att registrera en entitetsklient använder signalEntity eller callEntity anropar du en entitetsutlösarmetod från en registrerad funktion.
Från en köutlöst funktion kan du använda
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); }, });Från en orchestrator-funktion kan du använda
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; });
Du kan definiera en entitetsklient med hjälp av dekoratören durable_client_input direkt i python-funktionskoden.
Anmärkning
Entitetsklienter stöds ännu inte för Java.
Anmärkning
Entitetsklienter stöds ännu inte för PowerShell.
Mer information och exempel på hur du interagerar med entiteter som en klient finns i Åtkomstentiteter.
Durable Functions-inställningar i host.json
Det här avsnittet innehåller information om konfigurationsegenskaperna för Durable Functions i host.json. Information om allmänna inställningar i host.jsonfinns i host.json referens för Azure Functions 1.x eller host.json referens för Azure Functions 2.x och senare.
Konfigurationsinställningar för Durable Functions.
Anmärkning
Alla större versioner av Durable Functions stöds i alla versioner av Azure Functions-körningen. Schemat för host.json konfigurationen skiljer sig dock något beroende på vilken version av Azure Functions-körningen och vilken version av Durable Functions-tillägget du använder.
Följande kod innehåller två exempel på durableTask inställningar i host.json: en för Durable Functions 2.x och ett för Durable Functions 1.x. Du kan använda båda exemplen med Azure Functions 2.0 och 3.0. Med Azure Functions 1.0 är de tillgängliga inställningarna desamma, men durableTask avsnittet host.json finns i roten av host.json-konfigurationen i stället för att vara ett fält under .
{
"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
}
}
}
| Fastighet | Standardvärde | Beskrivning |
|---|---|---|
| hubNamn | TestHubName (DurableFunctionsHub i v1.x) | Namnet på hubben som lagrar det aktuella tillståndet för en funktionsapp. Namn på aktivitetshubben måste börja med en bokstav och bestå av endast bokstäver och siffror. Om du inte anger något namn används standardvärdet. Alternativa namn på aktivitetshubben kan användas för att isolera flera Durable Functions-program från varandra, även om de använder samma lagringsserverdel. Mer information finns i Uppgiftshubbar. |
| defaultVersion (standardversion) | Förinställd version för att tilldela till nya orkestreringsinstanser. När du anger en version associeras nya orkestreringsinstanser permanent med det här versionsvärdet. Den här inställningen används av funktionen för orkestreringsversionering för att aktivera scenarier som distributioner utan driftstopp med genombrottsförändringar. Du kan använda valfritt strängvärde för versionen. | |
| versionMatchStrategy | AktuellEllerÄldre | Ett värde som anger hur orkestreringsversioner matchas när orkestreringsfunktioner läses in. Giltiga värden är None, Strictoch CurrentOrOlder. Detaljerade förklaringar finns i Orkestreringsversionering. |
| strategi för versionsfel | Avvisa | Ett värde som anger vad som händer när en orkestreringsversion inte matchar det aktuella defaultVersion värdet. Giltiga värden är Reject och Fail. Detaljerade förklaringar finns i Orkestreringsversionering. |
| controlQueueBatchSize | 32 | Antalet meddelanden som ska hämtas från kontrollkön åt gången. |
| kontrollera köbuffertgräns |
Förbrukningsplan för Python: 32 Förbrukningsplan för andra språk: 128 Dedikerad eller Premium-plan: 256 |
Antalet kontrollkömeddelanden som kan bufferas i minnet åt gången. När det angivna numret har nåtts väntar distributören innan andra meddelanden köas av. I vissa situationer kan en minskning av det här värdet avsevärt minska minnesförbrukningen. |
| antal partitioner | 4 | Antalet partitioner för kontrollkön. Det här värdet måste vara ett positivt heltal mellan 1 och 16. Om du ändrar det här värdet måste du konfigurera en ny aktivitetshubb. |
| Kontroll av köens synlighetstidsgräns | 00:05:00 | Tidsgränsen för synligheten för dequeued-kontrollkömeddelanden i hh:mm:ss-format . |
| synlighetstimeout för arbetsobjektkö | 00:05:00 | Synlighetstidsgränsen för kömeddelanden för borttagna arbetsobjekt i hh:mm:ss format. |
| HämtaStoraMeddelandenAutomatiskt | sann | Ett värde som anger om stora meddelanden ska hämtas i orkestreringsstatusfrågor. När den här inställningen är truehämtas stora meddelanden som överskrider gränsen för köstorlek. När den här inställningen är falsehämtas en blob-URL som pekar på varje stort meddelande. |
| maximalt antal samtidiga aktivitetsfunktioner |
Förbrukningsplan: 10 Dedikerad eller Premium-plan: 10 gånger så många processorer på den aktuella datorn |
Det maximala antalet aktivitetsfunktioner som kan bearbetas samtidigt på en enda värdinstans. |
| maximalt antal samtidiga orkestratörsfunktioner |
Förbrukningsplan: 5 Dedikerad eller Premium-plan: 10 gånger så många processorer på den aktuella datorn |
Det maximala antalet orkestreringsfunktioner som kan bearbetas samtidigt på en enda värdinstans. |
| Maximala samtidiga enhetsfunktioner |
Förbrukningsplan: 5 Dedikerad eller Premium-plan: 10 gånger så många processorer på den aktuella datorn |
Det maximala antalet entitetsfunktioner som kan bearbetas samtidigt på en enda värdinstans. Den här inställningen gäller endast när du använder den varaktiga schemaläggaren. I annat fall begränsas det maximala antalet samtidiga entitetskörningar till maxConcurrentOrchestratorFunctions värdet. |
| max.köavfrågningsintervall | 00:00:30 | Det maximala avsökningsintervallet för kontroll och arbetsobjekt i hh:mm:ss-format . Högre värden kan resultera i högre svarstider för meddelandebearbetning. Lägre värden kan leda till högre lagringskostnader på grund av ökade lagringstransaktioner. |
| maxOrchestrationActions | 100,000 | Det maximala antalet åtgärder som en orkestreringsfunktion kan utföra under en enda körningscykel. |
| connectionName (v2.7.0 och senare) connectionStringName (v2.x) azureStorageConnectionStringName (v1.x) |
AzureWebJobsStorage | Namnet på en appinställning eller inställningssamling som anger hur du ansluter till de underliggande Azure Storage-resurserna. När du anger en enda appinställning bör det vara en Azure Storage-anslutningssträng. |
| trackingStoreConnectionName (v2.7.0 och senare) trackingStoreConnectionStringName |
Namnet på en appinställning eller inställningssamling som anger hur du ansluter till tabellerna Historik och Instanser, som lagrar körningshistoriken och metadata om orkestreringsinstanser. När du anger en enda appinställning bör det vara en Azure Storage-anslutningssträng. Om du inte anger någon inställning, används connectionStringName-värdet (v2.x) eller azureStorageConnectionStringName-värdet (v1.x). |
|
| trackingStoreNamePrefix | Prefixet som ska användas för tabellerna Historik och Instanser när trackingStoreConnectionStringName har angetts. Om du inte anger något prefix används standardvärdet DurableTask för . Om trackingStoreConnectionStringName inte anges använder tabellerna Historik och Instanser värdet hubName som prefix och inställningen trackingStoreNamePrefix ignoreras. |
|
| spåraInsatserOchResultat | falskt | Ett värde som anger om indata och utdata för funktionsanrop ska spåras. När funktioners körningshändelser spåras är standardinställningen att inkludera antalet byte i serialiserade indata och utdata för funktionsanrop. Det här beteendet ger minimal information om indata och utdata så att loggarna inte blir uppsvällda eller oavsiktligt exponerar känslig information. När den här egenskapen är trueloggas hela innehållet i funktionsindata och utdata. |
| traceReplayEvents | falskt | Ett värde som anger om orkestreringsreprishändelser ska skrivas till Application Insights. |
| loggaUppspelningshändelser | falskt | Ett värde som anger huruvida repriserade körningar ska loggas i programloggarna. |
| eventGridTopicEndpoint | URL:en för en anpassad Azure Event Grid-ämnesslutpunkt. När du anger den här egenskapen publiceras orkestreringens livscykelmeddelanden till den här slutpunkten. Den här egenskapen stöder lösning av appinställningar. | |
| eventGridNyckelInställningsNamn | Namnet på appinställningen som innehåller nyckeln som används för att autentisera med det anpassade Event Grid-ämnet på EventGridTopicEndpoint URL:en. |
|
| eventGridPubliceraOmbrytningsantal | 0 | Antalet gånger du försöker igen om publiceringen till Event Grid-ämnet misslyckas. |
| EventGridPubliceringsÅterkopplingsintervall | 00:05:00 | Event Grids publicerings- och återförsöksintervall i formatet hh:mm:ss. |
| eventGridPubliceraHändelsetyper | En lista över händelsetyper som ska publiceras till Event Grid. Om du inte anger några typer publiceras alla händelsetyper. Tillåtna värden är Started, Completed, Failedoch Terminated. |
|
| extendedSessionsEnabled | falskt | Ett värde som anger om sessionsorkestrerings- och entitetsfunktionssessioner cachelagras. |
| utökadSessionVilotidsgränsISekunder | 30 | Antalet sekunder som en inaktiv orkestrerings- eller entitetsfunktion finns kvar i minnet innan den tas bort. Den här inställningen används endast när inställningen extendedSessionsEnabled är true. |
| användAppLease | sann | Ett värde som anger om appar måste skaffa ett blob-leasing på appnivå innan meddelanden i aktivitetshubben bearbetas. För mer information, se haveriberedskap och geodistribution i Durable Functions. Den här inställningen är tillgänglig från och med v2.3.0. |
| användLegacyPartitionshantering | falskt | Ett värde som anger vilken typ av partitionshanteringsalgoritm som ska användas. När den här inställningen är falseanvänds en algoritm som minskar risken för duplicerad funktionskörning vid utskalning. Den här inställningen är tillgänglig från och med v2.3.0.
Det rekommenderas inte att sätta det här värdet till true. |
| AnvändTabellPartitionsHantering | I v3.x: true I v2.x: false |
Ett värde som anger vilken typ av partitionshanteringsalgoritm som ska användas. När den här inställningen är trueanvänds en algoritm som är utformad för att minska kostnaderna för Azure Storage v2-konton. Den här inställningen är tillgänglig från och med WebJobs.Extensions.DurableTask v2.10.0. Om du använder den här inställningen med en hanterad identitet krävs WebJobs.Extensions.DurableTask v3.x eller senare, eller Worker.Extensions.DurableTask v1.2.x eller senare. |
| använd smidig avstängning | falskt | (Förhandsversion) Ett värde som anger om du ska stänga av korrekt för att minska risken för att värdavstängningar orsakar att funktionskörningar i processen misslyckas. |
| maxEntityOperationBatchSize |
Förbrukningsplan: 50 Dedikerad eller Premium-plan: 5 000 |
Det maximala antalet entitetsåtgärder som bearbetas som en batch. Om det här värdet är 1 inaktiveras batchbearbetningen och ett separat funktionsanrop bearbetar varje åtgärdsmeddelande. Den här inställningen är tillgänglig från och med v2.6.1. |
| lagraIngångarIOrkestreringsHistorik | falskt | Ett värde som anger hur indata ska lagras. När den här inställningen är truesparar Durable Task Framework aktivitetsindata i tabellen Historik och aktivitetsfunktionens indata visas i orkestreringshistorikens frågeresultat. |
| maximal gRPC-meddelandestorlek i byte | 4,194,304 | Ett heltalsvärde som anger den maximala storleken i byte för meddelanden som den allmänna gRPC-klienten (Remote Procedure Call) kan ta emot. Implementeringen av DurableTaskClient använder gRPC-klienten för att hantera orkestreringsinstanser. Den här inställningen gäller för Durable Functions .NET-isolerade arbets- och Java-appar. |
| grpcHttpClientTimeout | 00:01:40 | Tidsgränsen i hh:mm:ss-format för HTTP-klienten som används av gRPC-klienten i Durable Functions. Klienten stöds för närvarande för .NET-isolerade arbetsappar (.NET 6 och senare versioner) och för Java-appar. |
| QueueClientMessageEncoding | UTF8 | Kodningsstrategin för Azure Queue Storage-meddelanden. Giltiga strategier är Unicode Transformation Format–8-bitars (UTF8) och Base64. Den här inställningen gäller när du använder Microsoft.Azure.WebJobs.Extensions.DurableTask 3.4.0 eller senare, eller Microsoft.Azure.Functions.Worker.Extensions.DurableTask 1.7.0 eller senare. |
| standardAsynkronBegäranSovtidMillisekunder | 30000 | Standardintervallet för avsökning i millisekunder för asynkrona HTTP-API:er. När en klient avsöker statusen för en långvarig orkestrering med hjälp av HTTP-statusfrågans slutpunkt avgör det här värdet hur länge klienten ska vänta innan avsökningen görs igen. |
| useForwardedHost | falskt | När värdet är inställt på sant använder tillägget HTTP-rubrikerna X-Forwarded-Host och X-Forwarded-Proto för att konstruera URL:er i HTTP-svar. |
Många av de här inställningarna är till för att optimera prestanda. Mer information finns i Prestanda och skala.