Associazioni per Funzioni permanenti (Funzioni di Azure)

L'estensione Durable Functions introduce tre associazioni di trigger che controllano l'esecuzione di funzioni di orchestrazione, entità e attività. L'estensione include inoltre un'associazione di output che funge da client per il runtime di Funzioni permanenti.

Assicurarsi di scegliere il linguaggio di sviluppo Durable Functions nella parte superiore dell'articolo.

Importante

Questo articolo supporta sia i modelli di programmazione Python v1 che Python v2 per Durable Functions.
Il modello di programmazione Python v2 è attualmente in anteprima.

Modello di programmazione Python v2

Durable Functions offre il supporto in anteprima del nuovo modello di programmazione Python v2. Per usare il modello v2, è necessario installare l'SDK di Durable Functions, ovvero il pacchetto azure-functions-durablePyPI, la versione 1.2.2 o una versione successiva. Durante l'anteprima, è possibile fornire commenti e suggerimenti nel repository Durable Functions SDK per Python.

L'uso di bundle di estensioni non è attualmente supportato per il modello v2 con Durable Functions. Sarà invece necessario gestire manualmente le estensioni come indicato di seguito:

  1. Rimuovere la sezione dell'utente extensionBundlehost.json come descritto in questo articolo relativo alle funzioni.

  2. Eseguire il func extensions install --package Microsoft.Azure.WebJobs.Extensions.DurableTask --version 2.9.1 comando nel terminale. Viene installata l'estensione Durable Functions per l'app, che consente di usare l'anteprima del modello v2.

Trigger di orchestrazione

Il trigger di orchestrazione consente di creare funzioni di orchestrazione durevoli. Questo trigger viene eseguito quando viene pianificata una nuova istanza di orchestrazione e quando un'istanza di orchestrazione esistente riceve un evento. Esempi di eventi che possono attivare funzioni dell'agente di orchestrazione includono scadenze timer durevoli, risposte alle funzioni di attività ed eventi generati da client esterni.

Quando si creano funzioni in .NET, il trigger di orchestrazione viene configurato usando l'attributo OrchestrationTriggerAttribute .NET.

Per Java, l'annotazione @DurableOrchestrationTrigger viene usata per configurare il trigger di orchestrazione.

Quando si scrivono funzioni dell'agente di orchestrazione, il trigger di orchestrazione viene definito dall'oggetto JSON seguente nella bindings matrice del file function.json :

{
    "name": "<Name of input parameter in function signature>",
    "orchestration": "<Optional - name of the orchestration>",
    "type": "orchestrationTrigger",
    "direction": "in"
}
  • orchestration è il nome dell'orchestrazione che i client devono usare quando vogliono avviare nuove istanze di questa funzione dell'agente di orchestrazione. Questa proprietà è facoltativa. Se non specificato, viene usato il nome della funzione.

Funzioni di Azure supporta due modelli di programmazione per Python. Il modo in cui si definisce un trigger di orchestrazione dipende dal modello di programmazione scelto.

Il modello di programmazione Python v2 consente di definire un trigger di orchestrazione usando l'elemento orchestration_trigger Decorator direttamente nel codice della funzione Python.

Nel modello v2 i trigger e le associazioni Durable Functions sono accessibili da un'istanza di DFApp, che è una sottoclasse di FunctionApp che esporta inoltre Durable Functions decorator specifici.

Internamente, questa associazione di trigger esegue il polling dell'archivio durevole configurato per nuovi eventi di orchestrazione, ad esempio eventi di avvio dell'orchestrazione, eventi di scadenza del timer durevole, eventi di risposta della funzione di attività ed eventi esterni generati da altre funzioni.

Comportamento di trigger

Di seguito vengono indicate alcune note relative al trigger di orchestrazione:

  • Thread singolo - Un singolo thread del dispatcher viene usato per l'esecuzione di tutte le funzioni dell'agente di orchestrazione in un'unica istanza dell'host. Per questo motivo, è importante assicurarsi che il codice della funzione dell'agente di orchestrazione sia efficiente e non esegua operazioni di I/O. È anche importante garantire che il thread non esegua alcuna operazione asincrona, ad eccezione di quando è in attesa su tipi di attività specifiche di Funzioni permanenti.
  • Gestione dei messaggi non elaborabili : non è disponibile alcun supporto per i messaggi non elaborabili nei trigger di orchestrazione.
  • Visibilità dei messaggi - I messaggi dei trigger di orchestrazione vengono rimossi dalla coda e resi invisibili per un periodo di tempo configurabile. La visibilità di questi messaggi viene rinnovata automaticamente fino a quando l'app per le funzioni è in esecuzione e integra.
  • Valori restituiti - I valori restituiti vengono serializzati in JSON e salvati in modo permanente nella tabella di cronologia di orchestrazione nell'archiviazione tabelle di Azure. Su tali valori l'associazione client di orchestrazione può eseguire query, come descritto in seguito.

Avviso

Le funzioni dell'agente di orchestrazione non devono mai usare alcuna associazione di input o output diversa da quella di trigger di orchestrazione. In caso contrario, possono verificarsi problemi con l'estensione di attività permanenti in quanto tali associazioni potrebbero non rispettare le regole di thread singolo e di I/O. Se si vogliono usare altre associazioni, aggiungerle a una funzione di attività chiamata dalla funzione dell'agente di orchestrazione. Per altre informazioni sui vincoli di codifica per le funzioni dell'agente di orchestrazione, vedere la documentazione sui vincoli di codice della funzione di Orchestrator .

Avviso

Le funzioni dell'agente di orchestrazione non devono mai essere dichiarate async.

Utilizzo dei trigger

L'associazione di trigger di orchestrazione supporta sia input che output. Di seguito sono illustrati alcuni aspetti da conoscere sulla gestione di input e output.

  • input: i trigger di orchestrazione possono essere richiamati con input, a cui si accede tramite l'oggetto di input del contesto. Tutti gli input devono essere serializzabili in JSON.
  • output -I trigger di orchestrazione supportano valori di output in modo analogo ai valori di input. Il valore restituito della funzione viene usato per assegnare il valore di output e deve essere serializzabile in JSON.

Esempio di trigger

Il codice di esempio seguente mostra l'aspetto della funzione dell'agente di orchestrazione "Hello World" più semplice. Si noti che questo agente di orchestrazione di esempio non pianifica effettivamente alcuna attività.

L'attributo specifico usato per definire il trigger dipende dal fatto che si eseguano le funzioni C# in-process o in un processo di lavoro isolato.

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

Nota

Il codice precedente è per Durable Functions 2.x. Per Durable Functions 1.x, è necessario usare DurableOrchestrationContext anziché IDurableOrchestrationContext. Per altre informazioni sulle differenze tra le versioni, vedere l'articolo versioni di Durable Functions.

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

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

Nota

La durable-functions libreria si occupa di chiamare il metodo sincrono context.done quando la funzione generatore viene chiusa.

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

La maggior parte delle funzioni dell'agente di orchestrazione chiama funzioni di attività, pertanto viene riportato un esempio "Hello World" che illustra come chiamare una funzione di attività:

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

Nota

Il codice precedente è per Durable Functions 2.x. Per Durable Functions 1.x, è necessario usare DurableOrchestrationContext anziché IDurableOrchestrationContext. Per altre informazioni sulle differenze tra le versioni, vedere l'articolo Durable Functions versioni.

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

Trigger attività

Il trigger di attività consente di creare funzioni chiamate dalle funzioni dell'agente di orchestrazione, note come funzioni di attività.

Il trigger di attività viene configurato usando l'attributo ActivityTriggerAttribute .NET.

Il trigger di attività viene configurato usando l'annotazione @DurableActivityTrigger .

Il trigger di attività è definito dall'oggetto JSON seguente nella bindings matrice di function.json:

{
    "name": "<Name of input parameter in function signature>",
    "activity": "<Optional - name of the activity>",
    "type": "activityTrigger",
    "direction": "in"
}
  • activity è il nome dell'attività. Questo valore è il nome usato dalle funzioni dell'agente di orchestrazione per richiamare questa funzione di attività. Questa proprietà è facoltativa. Se non specificato, viene usato il nome della funzione.

Il modo in cui si definisce un trigger di attività dipende dal modello di programmazione scelto.

Uso del activity_trigger decorator direttamente nel codice della funzione Python.

Internamente, questo trigger binding esegue il polling dell'archivio durevole configurato per nuovi eventi di esecuzione attività.

Comportamento di trigger

Di seguito vengono indicate alcune note relative al trigger di attività:

  • Threading - A differenza del trigger di orchestrazione, i trigger di attività non presentano restrizioni relative a threading oppure a operazioni di I/O e possono essere considerati come normali funzioni.
  • Gestione dei messaggi non elaborabili : non è disponibile alcun supporto per i messaggi non aggiornati nei trigger di attività.
  • Visibilità dei messaggi - I messaggi dei trigger di attività vengono rimossi dalla coda e resi invisibili per un periodo di tempo configurabile. La visibilità di questi messaggi viene rinnovata automaticamente fino a quando l'app per le funzioni è in esecuzione e integra.
  • Valori restituiti : i valori restituiti vengono serializzati in JSON e mantenuti nell'archivio durevole configurato.

Utilizzo dei trigger

In modo analogo al trigger di orchestrazione, l'associazione di trigger di attività supporta sia input che output. Di seguito sono illustrati alcuni aspetti da conoscere sulla gestione di input e output.

  • input: i trigger attività possono essere richiamati con input da una funzione dell'agente di orchestrazione. Tutti gli input devono essere serializzabili json.
  • output - Le funzioni di attività supportano i valori di output in modo analogo a quelli di input. Il valore restituito della funzione viene usato per assegnare il valore di output e deve essere serializzabile in JSON.
  • metadati : le funzioni attività .NET possono essere associate a un string instanceId parametro per ottenere l'ID istanza dell'orchestrazione chiamante.

Esempio di trigger

Il codice di esempio seguente mostra come potrebbe essere simile a una semplice SayHello funzione di attività.

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

Il tipo di parametro predefinito per l'associazione .NET ActivityTriggerAttribute è IDurableActivityContext (o DurableActivityContext per Durable Functions v1). I trigger di attività .NET, tuttavia, supportano anche l'associazione diretta a tipi serializzabili in JSON, ad esempio tipi primitivi, e di conseguenza la stessa funzione potrebbe essere semplificata nel modo seguente:

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

Le associazioni JavaScript possono anche essere passate come parametri aggiuntivi, di conseguenza la stessa funzione potrebbe essere semplificata nel modo seguente:

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

Uso di associazioni di input e output

È possibile usare associazioni di input e output regolari oltre all'associazione di trigger attività.

Ad esempio, è possibile accettare l'input nell'associazione di attività e inviare un messaggio a un EventHub usando l'associazione di output di EventHub:

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

Client di orchestrazione

L'associazione client di orchestrazione consente di scrivere funzioni che interagiscono con le funzioni dell'agente di orchestrazione. Queste funzioni vengono spesso definite funzioni client. È possibile ad esempio agire su istanze di orchestrazione nei modi seguenti:

  • Avviare le istanze.
  • Eseguire query sullo stato delle istanze.
  • Terminare le istanze.
  • Inviare eventi alle istanze mentre sono in esecuzione.
  • Ripulire la cronologia di istanza.

È possibile eseguire il binding al client di orchestrazione usando l'attributo DurableClientAttribute (OrchestrationClientAttribute in Durable Functions v1.x).

È possibile associare al client di orchestrazione usando l'annotazione @DurableClientInput .

Il trigger client durevole è definito dall'oggetto bindings JSON seguente nella matrice di 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 - Usato in scenari in cui più app per le funzioni condividono lo stesso account di archiviazione, ma devono essere isolate tra loro. Se non specificato, viene usato il valore predefinito da host.json. Tale valore deve corrispondere a quello usato dalle funzioni dell'agente di orchestrazione di destinazione.
  • connectionName - Il nome di un'impostazione dell'app che contiene la stringa di connessione di un account di archiviazione. L'account di archiviazione rappresentato da questa stringa di connessione deve essere lo stesso usato dalle funzioni dell'agente di orchestrazione di destinazione. Se non è specificato, viene usata la stringa di connessione dell'account di archiviazione predefinito dell'app per le funzioni.

Nota

Nella maggior parte dei casi è consigliabile omettere queste proprietà e basarsi sul comportamento predefinito.

Il modo in cui si definisce un trigger client durevole dipende dal modello di programmazione scelto.

Uso del durable_client_input decorator direttamente nel codice della funzione Python.

Uso del client

In genere si esegue il binding a IDurableClient (DurableOrchestrationClient in Durable Functions v1.x), che consente di accedere a tutte le API client di orchestrazione supportate da Durable Functions.

In genere si associa alla DurableClientContext classe.

È necessario usare l'SDK specifico del linguaggio per ottenere l'accesso a un oggetto client.

Ecco una funzione attivata dalla coda di esempio che avvia un'orchestrazione "HelloWorld".

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

Nota

Il codice C# precedente è per Durable Functions 2.x. Per Durable Functions 1.x, è necessario usare l'attributo anziché l'attributo DurableClient e è necessario usare OrchestrationClient il DurableOrchestrationClient tipo di parametro anziché IDurableOrchestrationClient. Per altre informazioni sulle differenze tra le versioni, vedere l'articolo Durable Functions Versioni.

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

Per altre informazioni sull'avvio di istanze, vedere Instance management (Gestione di istanze).

Trigger di entità

I trigger di entità consentono di creare funzioni di entità. Questo trigger supporta l'elaborazione di eventi per un'istanza di entità specifica.

Nota

I trigger di entità sono disponibili a partire da Durable Functions 2.x.

Internamente, questo trigger binding esegue il polling dell'archivio durevole configurato per le nuove operazioni di entità che devono essere eseguite.

Il trigger di entità viene configurato usando l'attributo EntityTriggerAttribute .NET.

Nota

I trigger di entità non sono ancora supportati per le app di processo di lavoro isolate.

Il trigger di entità è definito dall'oggetto bindings JSON seguente nella matrice di function.json:

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

Per impostazione predefinita, il nome di un'entità è il nome della funzione.

Nota

I trigger di entità non sono ancora supportati per Java.

Il modo in cui si definisce un trigger di entità dipende dal modello di programmazione scelto.

Uso dell'elemento entity_trigger Decorator direttamente nel codice della funzione Python.

Comportamento di trigger

Ecco alcune note sul trigger di entità:

  • Thread singolo: viene usato un singolo thread dispatcher per elaborare le operazioni per una determinata entità. Se più messaggi vengono inviati simultaneamente a una singola entità, le operazioni verranno elaborate una alla volta.
  • Gestione dei messaggi non elaborabili : non è disponibile alcun supporto per i messaggi non elaborabili nei trigger di entità.
  • Visibilità dei messaggi: i messaggi trigger di entità vengono dequeued e mantenuti invisibili per una durata configurabile. La visibilità di questi messaggi viene rinnovata automaticamente fino a quando l'app per le funzioni è in esecuzione e integra.
  • Valori restituiti : le funzioni di entità non supportano i valori restituiti. Sono disponibili API specifiche che possono essere usate per salvare lo stato o passare di nuovo i valori alle orchestrazioni.

Tutte le modifiche dello stato apportate a un'entità durante l'esecuzione verranno rese persistenti automaticamente dopo il completamento dell'esecuzione.

Per altre informazioni ed esempi sulla definizione e l'interazione con i trigger di entità, vedere la documentazione di Durable Entities .

Client di entità

L'associazione client di entità consente di attivare in modo asincrono le funzioni di entità. Queste funzioni vengono talvolta definite funzioni client.

È possibile eseguire l'associazione al client di entità usando l'attributo DurableClientAttribute .NET nelle funzioni della libreria di classi .NET.

Nota

Può [DurableClientAttribute] essere usato anche per eseguire l'associazione al client di orchestrazione.

Il client di entità è definito dall'oggetto JSON seguente nella bindings matrice di 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 - Usato in scenari in cui più app per le funzioni condividono lo stesso account di archiviazione, ma devono essere isolate tra loro. Se non specificato, viene usato il valore predefinito da host.json. Questo valore deve corrispondere al valore usato dalle funzioni di entità di destinazione.
  • connectionName - Il nome di un'impostazione dell'app che contiene la stringa di connessione di un account di archiviazione. L'account di archiviazione rappresentato da questa stringa di connessione deve essere lo stesso usato dalle funzioni dell'entità di destinazione. Se non è specificato, viene usata la stringa di connessione dell'account di archiviazione predefinito dell'app per le funzioni.

Nota

Nella maggior parte dei casi, è consigliabile omettere le proprietà facoltative e basarsi sul comportamento predefinito.

Il modo in cui si definisce un client di entità dipende dal modello di programmazione scelto.

Uso dell'elemento durable_client_input Decorator direttamente nel codice della funzione Python.

Nota

I client di entità non sono ancora supportati per Java.

Per altre informazioni ed esempi sull'interazione con le entità come client, vedere la documentazione di Durable Entities .

impostazioni host.json

Impostazioni di configurazione per Funzioni permanenti.

Nota

Tutte le versioni principali di Durable Functions sono supportate in tutte le versioni del runtime di Funzioni di Azure. Tuttavia, lo schema della configurazione host.json è leggermente diverso a seconda della versione del runtime di Funzioni di Azure e della versione dell'estensione Durable Functions in uso. Gli esempi seguenti riguardano Funzioni di Azure 2.0 e 3.0. In entrambi gli esempi se si usa Funzioni di Azure 1.0, le impostazioni disponibili sono le stesse, ma la sezione "durableTask" del file host.json deve trovarsi nella radice della configurazione host.json invece che in un campo sotto "extension".

{
 "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,
      "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",
          "Pending",
          "Failed",
          "Terminated"
        ]
      }
    },
    "maxConcurrentActivityFunctions": 10,
    "maxConcurrentOrchestratorFunctions": 10,
    "extendedSessionsEnabled": false,
    "extendedSessionIdleTimeoutInSeconds": 30,
    "useAppLease": true,
    "useGracefulShutdown": false,
    "maxEntityOperationBatchSize": 50
  }
 }
}

I nomi degli hub attività devono iniziare con una lettera e contenere solo lettere e numeri. Se non specificato, il nome predefinito dell'hub attività per un'app per le funzioni è TestHubName. Per altre informazioni, vedere Hub attività.

Proprietà Predefinito Descrizione
hubName TestHubName (DurableFunctionsHub se si usa Durable Functions 1.x) I nomi alternativi dell'hub attività possono essere usati per separare le applicazioni di Durable Functions, anche se usano lo stesso back-end di archiviazione.
controlQueueBatchSize 32 Numero di messaggi di cui eseguire il pull dalla coda di controllo contemporaneamente.
controlQueueBufferThreshold Piano a consumo per Python: 32
Piano a consumo per JavaScript e C#: 128
Piano Dedicato/Premium: 256
Numero di messaggi della coda di controllo che possono essere memorizzati nel buffer in memoria contemporaneamente. Dopo tale soglia il dispatcher attenderà prima di rimuovere dalla coda eventuali altri messaggi.
partitionCount 4 Numero di partizioni per la coda di controllo. Può essere un numero intero positivo compreso tra 1 e 16.
controlQueueVisibilityTimeout 5 minuti Timeout di visibilità dei messaggi rimossi dalla coda di controllo.
workItemQueueVisibilityTimeout 5 minuti Timeout di visibilità dei messaggi della coda degli elementi di lavoro dequeued.
maxConcurrentActivityFunctions Piano a consumo: 10
Piano Dedicato/Premium: 10 volte il numero di processori nel computer corrente
Numero massimo di funzioni di attività che possono essere elaborate contemporaneamente in una singola istanza host.
maxConcurrentOrchestratorFunctions Piano a consumo: 5
Piano Dedicato/Premium: 10 volte il numero di processori nel computer corrente
Numero massimo di funzioni dell'agente di orchestrazione che possono essere elaborate contemporaneamente in una singola istanza host.
maxQueuePollingInterval 30 secondi Intervallo massimo di polling della coda di controllo e degli elementi di lavoro nel formato hh:mm:ss. Valori più elevati possono comportare un incremento della latenza nell'elaborazione dei messaggi. Valori inferiori possono comportare un incremento dei costi di archiviazione a causa dell'aumento del numero di transazione di archiviazione.
connectionName (2.7.0 e versioni successive)
connectionStringName (2.x)
azureStorageConnectionStringName (1.x)
AzureWebJobsStorage Nome di un'impostazione o di un insieme di impostazioni dell'app che specifica come connettersi alle risorse di Archiviazione di Azure sottostanti. Quando viene fornita un'unica impostazione dell'app, deve essere una stringa di connessione di Archiviazione di Azure.
trackingStoreConnectionName (2.7.0 e versioni successive)
trackingStoreConnectionStringName
Nome di un'impostazione o di un insieme di impostazioni dell'app che specifica come connettersi alle tabelle Cronologia e istanze. Quando viene fornita un'unica impostazione dell'app, deve essere una stringa di connessione di Archiviazione di Azure. Se non è specificato, viene usata la connessione connectionStringName (Durable 2.x) o azureStorageConnectionStringName (Durable 1.x).
trackingStoreNamePrefix Prefisso da usare per le tabelle Cronologia e Istanze quando si specifica trackingStoreConnectionStringName. Se non è impostato, il valore predefinito del prefisso sarà DurableTask. Se trackingStoreConnectionStringName non è specificato, come prefisso delle tabelle Cronologia e Istanze verrà usato il valore hubName ed eventuali impostazioni di trackingStoreNamePrefix verranno ignorate.
traceInputsAndOutputs false Valore che indica se tenere traccia degli input e degli output di chiamate di funzione. Quando si tiene traccia degli eventi di esecuzione delle funzioni, il comportamento predefinito prevede di includere il numero di byte degli input e output serializzati per le chiamate di funzione. Con questo comportamento vengono offerte informazioni minime sull'aspetto di input e output senza aumentare il numero di log o esporre inavvertitamente informazioni riservate. Se questa proprietà viene impostata su true, per impostazione predefinita viene registrato l'intero contenuto degli input e output della funzione.
traceReplayEvents false Un valore che indica se scrivere eventi di riproduzione di orchestrazione in Application Insights.
eventGridTopicEndpoint URL di un endpoint di un argomento personalizzato di Griglia di eventi di Azure. Se questa proprietà è impostata, gli eventi di notifica del ciclo di vita dell'orchestrazione vengono pubblicati in questo endpoint. Questa proprietà supporta la risoluzione delle impostazioni dell'app.
eventGridKeySettingName Nome dell'impostazione dell'app che contiene la chiave usata per l'autenticazione con l'argomento personalizzato di Griglia di eventi di Azure in EventGridTopicEndpoint.
eventGridPublishRetryCount 0 Il numero di tentativi se la pubblicazione nell'argomento di Griglia di eventi ha esito negativo.
eventGridPublishRetryInterval 5 minuti Intervallo fra i tentativi di pubblicazione in Griglia di eventi nel formato hh:mm:ss.
eventGridPublishEventTypes Elenco dei tipi di evento da pubblicare in Griglia di eventi. Se non è specificato, verranno pubblicati tutti i tipi di evento. I valori consentiti includono Started, Completed, Failed, Terminated.
useAppLease true Se è impostato su true, le app richiederanno l'acquisizione di un lease di BLOB a livello di app prima di elaborare i messaggi dell'hub attività. Per altre informazioni vedere la documentazione su ripristino di emergenza e distribuzione geografica. Disponibile a partire dalla versione v2.3.0.
useLegacyPartitionManagement false Se impostato su false, usa un algoritmo di gestione delle partizioni che riduce la possibilità di eseguire la funzione duplicata durante il ridimensionamento. Disponibile a partire dalla versione 2.3.0.
useGracefulShutdown false (Anteprima) Abilita l'arresto in modalità normale per ridurre la possibilità di arresti dell'host che non riescono a completare le esecuzioni di funzioni in-process.
maxEntityOperationBatchSize(2.6.1) Piano di consumo: 50
Piano Dedicato/Premium: 5000
Numero massimo di operazioni di entità elaborate come batch. Se impostato su 1, il batch è disabilitato e ogni messaggio di operazione viene elaborato da una chiamata di funzione separata.

Molte di queste impostazioni vengono usate per ottimizzare le prestazioni. Per altre informazioni, vedere Prestazioni e scalabilità.

Passaggi successivi