Compartir a través de


Enlaces para Durable Functions (Azure Functions)

La extensión Durable Functions introduce tres asociaciones de desencadenadores que controlan la ejecución de funciones de orquestador, entidad y actividad. También presenta un enlace de salida que actúa como cliente para el entorno de ejecución de Durable Functions.

Asegúrese de elegir el lenguaje de desarrollo de Durable Functions en la parte superior del artículo.

Importante

En este artículo se admiten modelos de programación de Python v1 y Python v2 para Durable Functions.

Modelo de programación de Python v2

Durable Functions se admite en el nuevo modelo de programación de Python v2. Para usar el modelo v2, debe instalar el SDK de Durable Functions, que es el paquete azure-functions-durablepyPI, la versión 1.2.2 o una versión posterior. También debe comprobar host.json para asegurarse de que la aplicación hace referencia a Extension Bundles versión 4.x para usar el modelo v2 con Durable Functions.

Puede proporcionar comentarios y sugerencias en el repositorio del SDK de Durable Functions para Python.

Desencadenador de orquestación

El desencadenador de orquestación permite crear funciones de orquestador duraderas. Este desencadenador se ejecuta cuando se programa una nueva instancia de orquestación y cuando una instancia de orquestación existente recibe un evento. Entre los ejemplos de eventos que pueden desencadenar funciones de orquestador se incluyen expiraciones de temporizadores de larga duración, respuestas de funciones de actividades y eventos desencadenados por clientes externos.

Al crear funciones en .NET, el desencadenador de orquestación se configura mediante el atributo OrchestrationTriggerAttribute .NET.

Para Java, la @DurableOrchestrationTrigger anotación se usa para configurar el desencadenador de orquestación.

Al escribir funciones de orquestador, el desencadenador de orquestación se define mediante el siguiente objeto JSON en la bindings matriz del archivo function.json :

{
    "name": "<Name of input parameter in function signature>",
    "orchestration": "<Optional - name of the orchestration>",
    "type": "orchestrationTrigger",
    "direction": "in"
}
  • orchestration es el nombre de la orquestación que los clientes deben usar cuando quieren iniciar nuevas instancias de esta función de orquestador. Esta propiedad es opcional. Si no se especifica, se usa el nombre de la función.

Azure Functions admite dos modelos de programación para Python. La forma en que se define un desencadenador de orquestación depende del modelo de programación elegido.

El modelo de programación de Python v2 permite definir un desencadenador de orquestación utilizando el decorador `orchestration_trigger` directamente en el código de función de Python.

En el modelo v2, se accede a los desencadenadores y enlaces de Durable Functions desde una instancia de DFApp, que es una subclase de FunctionApp, y además exporta decoradores específicos de Durable Functions.

Internamente, este enlace de desencadenador sondea el almacén de larga duración configurado en busca de nuevos eventos de orquestación, como eventos de inicio de orquestación, eventos de expiración de temporizadores de larga duración, eventos de respuestas de funciones de actividades y eventos externos desencadenados por otras funciones.

Comportamiento del desencadenador

Aquí tienes algunas notas sobre el activador de orquestación:

  • Subproceso único : se usa un único subproceso de distribuidor para toda la ejecución de la función de orquestador en una sola instancia de host. Por este motivo, es importante asegurarse de que el código de función del orquestador sea eficaz y no realice ninguna E/S. También es importante asegurarse de que este subproceso no realiza ningún trabajo asincrónico, excepto cuando se espera en tipos de tareas específicos de Durable Functions.
  • Control de mensajes dudosos: no hay compatibilidad con mensajes dudosos en los desencadenadores de orquestación.
  • Visibilidad de los mensajes: los mensajes de desencadenador de orquestación se quitan de la cola y se mantienen invisibles durante un tiempo configurable. La visibilidad de estos mensajes se renueva automáticamente siempre que la aplicación de funciones se esté ejecutando y en buen estado.
  • Valores devueltos: los valores devueltos se serializan en JSON y se conservan en la tabla del historial de orquestaciones de Azure Table Storage. Estos valores devueltos se pueden consultar mediante la vinculación del cliente de orquestación, que se describe posteriormente.

Advertencia

Las funciones de orquestador nunca deben usar ningún enlace de entrada o salida que no sea el enlace del desencadenador de orquestación. Si lo hacen, existe la posibilidad de que se produzcan problemas con la extensión Durable Task porque esos enlaces pueden no seguir las reglas de E/S y subprocesamiento único. Si desea usar otros enlaces, agréguelos a una función de actividad llamada desde la función de orquestador. Para obtener más información sobre las restricciones de codificación para las funciones de orquestador, consulte la documentación sobre restricciones de código de función de Orchestrator .

Advertencia

Las funciones del orquestador nunca se deberían declarar como async.

Uso del desencadenador

El enlace de desencadenador de orquestación admite entradas y salidas. Estos son algunos aspectos que se deben saber sobre el control de entrada y salida:

  • entradas : los desencadenadores de orquestación se pueden invocar con entradas, a las que se accede a través del objeto de entrada de contexto. Todas las entradas deben ser serializables por JSON.
  • salidas : los desencadenadores de orquestación admiten valores de entrada y salida. El valor devuelto de la función se usa para asignar el valor de salida y debe ser serializable en JSON.

Ejemplo de desencadenador

En el código de ejemplo siguiente se muestra el aspecto de la función de orquestador "Hola mundo" más sencilla. Este orquestador de ejemplo no programa realmente ninguna tarea.

El atributo específico que se usa para definir el desencadenador depende de si ejecuta las funciones de C# en proceso o en un proceso de trabajo aislado.

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

Nota:

El código anterior es para Durable Functions 2.x. En el caso de Durable Functions 1.x, debe usar DurableOrchestrationContext en lugar de IDurableOrchestrationContext. Para obtener más información sobre las diferencias entre las versiones; consulte el artículo Durable Functions: Versiones.

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

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

Nota:

La durable-functions biblioteca se encarga de llamar al método sincrónico context.done cuando se cierra la función del generador.

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 mayoría de las funciones del orquestador llaman a funciones de actividad, por lo que aquí tenemos un ejemplo de "Hola mundo" que muestra cómo llamar a una función de actividad:

[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:

El código anterior es para Durable Functions 2.x. En el caso de Durable Functions 1.x, debe usar DurableOrchestrationContext en lugar de IDurableOrchestrationContext. Para más información sobre las diferencias entre versiones, consulte el artículo Versiones de Durable Functions.

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

Desencadenador de actividad

El desencadenador de actividad le permite crear funciones que las funciones del orquestador llaman, conocidas como funciones de actividad.

El desencadenador de actividad se configura mediante el atributo ActivityTriggerAttribute .NET.

El desencadenador de actividad se configura mediante la anotación @DurableActivityTrigger.

El desencadenador de actividad se define mediante el siguiente objeto JSON en la bindings matriz de function.json:

{
    "name": "<Name of input parameter in function signature>",
    "activity": "<Optional - name of the activity>",
    "type": "activityTrigger",
    "direction": "in"
}
  • activity es el nombre de la actividad. Este valor es el nombre que usan las funciones de orquestador para invocar esta función de actividad. Esta propiedad es opcional. Si no se especifica, se usa el nombre de la función.

La forma en que se define un desencadenador de actividad depende del modelo de programación elegido.

Uso del decorador activity_trigger directamente en el código de función de Python.

Internamente, este enlace de desencadenador sondea el almacén de larga duración configurado para los nuevos eventos de ejecución de actividad.

Comportamiento del desencadenador

Estas son algunas notas sobre el desencadenador de actividad:

  • Subprocesamiento: a diferencia del desencadenador de orquestación, los desencadenadores de actividad no tienen ninguna restricción en relación a los subprocesos o E/S. Se pueden tratar como funciones normales.
  • Control de mensajes dudosos: no hay compatibilidad con mensajes dudosos en los desencadenadores de actividad.
  • Visibilidad de los mensajes: los mensajes de desencadenador de actividad se quitan de la cola y se mantienen invisibles durante un tiempo configurable. La visibilidad de estos mensajes se renueva automáticamente siempre que la aplicación de funciones se esté ejecutando y en buen estado.
  • Valores devueltos : los valores devueltos se serializan en JSON y se conservan en el almacén duradero configurado.

Uso del desencadenador

El enlace de desencadenador de actividad admite entradas y salidas como el desencadenador de orquestación. Estos son algunos aspectos que se deben saber sobre el control de entrada y salida:

  • entradas : los desencadenadores de actividad se pueden invocar con entradas de una función de orquestador. Todas las entradas deben ser serializables por JSON.
  • salidas : las funciones de actividad admiten valores de entrada y salida. El valor devuelto de la función se usa para asignar el valor de salida y debe ser serializable en JSON.
  • metadatos : las funciones de actividad de .NET pueden enlazarse a un string instanceId parámetro para obtener el identificador de instancia de la orquestación de llamadas.

Ejemplo de desencadenador

En el código de ejemplo siguiente se muestra el aspecto de una función de actividad simple SayHello .

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

El tipo de parámetro predeterminado para el enlace de .NET ActivityTriggerAttribute es IDurableActivityContext (o DurableActivityContext para Durable Functions v1). Sin embargo, los desencadenadores de actividad de .NET también admiten el enlace directamente a tipos serializables json (incluidos los tipos primitivos), por lo que la misma función podría simplificarse de la siguiente manera:

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

Los enlaces de JavaScript también se pueden pasar como parámetros adicionales, por lo que la misma función podría simplificarse de la siguiente manera:

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 de enlaces de entrada y salida

Puede usar enlaces de entrada y salida normales además del enlace del desencadenador de actividad.

Por ejemplo, puede tomar la entrada en el enlace de actividad y enviar un mensaje a un centro de eventos mediante el enlace de salida de Event Hubs:

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

Cliente de orquestación

El enlace de cliente de orquestación permite escribir funciones que interactúan con las funciones de orquestador. Estas funciones se conocen a menudo como funciones cliente. Por ejemplo, puede actuar en instancias de orquestación de las maneras siguientes:

  • Iniciarlas.
  • Consulte su estado.
  • Termínalos.
  • Enviarles eventos mientras se están ejecutando.
  • Purgar del historial de instancias.

Puede enlazar al cliente de orquestación mediante el atributo DurableClientAttribute (OrchestrationClientAttribute en Durable Functions v1.x).

Puede vincular al cliente de orquestación mediante la anotación @DurableClientInput.

El desencadenador de cliente duradero se define mediante el siguiente objeto JSON en la bindings matriz de 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 : se usa en escenarios en los que varias aplicaciones de función comparten la misma cuenta de almacenamiento, pero deben aislarse entre sí. Si no se especifica, se usa el valor predeterminado de host.json . Este valor debe coincidir con el valor usado por las funciones de orquestador de destino.
  • connectionName : el nombre de una configuración de aplicación que contiene una cadena de conexión de la cuenta de almacenamiento. La cuenta de almacenamiento representada por esta cadena de conexión debe ser la misma que usan las funciones de orquestador de destino. Si no se especifica, se usa la cadena de conexión de la cuenta de almacenamiento predeterminada para la aplicación de funciones.

Nota:

En la mayoría de los casos, se recomienda omitir estas propiedades y confiar en el comportamiento predeterminado.

La forma en que se define un desencadenador de cliente duradero depende del modelo de programación elegido.

Uso del decorador durable_client_input directamente en el código de función de Python.

Uso del cliente

Normalmente, se enlaza a IDurableClient (DurableOrchestrationClient en Durable Functions v1.x), lo que proporciona acceso completo a todas las API de cliente de orquestación compatibles con Durable Functions.

Normalmente, te vinculas a la clase DurableClientContext.

Debe usar el SDK específico del lenguaje para obtener acceso a un objeto de cliente.

Aquí tenemos un ejemplo de una función desencadenada por la cola que inicia una orquestación "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<string>("HelloWorld", input);
}

Nota:

El código de C# anterior es para Durable Functions 2.x. Para Durable Functions 1.x, debe usar el atributo OrchestrationClient en lugar del atributo DurableClient, y debe usar el tipo de parámetro DurableOrchestrationClient en lugar de IDurableOrchestrationClient. Para obtener más información sobre las diferencias entre las versiones; consulte el artículo Durable Functions: Versiones.

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

Puede encontrar más detalles sobre iniciar instancias en Administración de instancias.

Desencadenador de entidad

Los desencadenadores de entidad permiten crear funciones de entidad. Este desencadenador admite el procesamiento de eventos para una instancia de entidad específica.

Nota:

Los desencadenadores de entidad están disponibles a partir de Durable Functions 2.x.

Internamente, este enlace de desencadenador sondea el almacén de larga duración configurado para las nuevas operaciones de entidad que deben ejecutarse.

El desencadenador de entidad se configura mediante el atributo EntityTriggerAttribute .NET.

El siguiente objeto JSON define el desencadenador de entidad en la matriz bindings de function.json:

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

De forma predeterminada, el nombre de una entidad es el nombre de la función.

Nota:

Todavía no se admiten desencadenadores de entidad para Java.

La forma en que se define un desencadenador de entidad depende del modelo de programación elegido.

Uso del decorador entity_trigger directamente en el código de función de Python.

Comportamiento del desencadenador

Estas son algunas notas sobre el desencadenador de entidad:

  • De un único proceso: un único subproceso de distribuidor se utiliza para procesar las operaciones de una entidad determinada. Si se envían varios mensajes a una sola entidad simultáneamente, las operaciones se procesan de uno a uno.
  • Control de mensajes dudosos: no hay compatibilidad con mensajes dudosos en los desencadenadores de entidad.
  • Visibilidad de los mensajes: los mensajes de desencadenador de entidad se quitan de la cola y se mantienen invisibles durante un tiempo configurable. La visibilidad de estos mensajes se renueva automáticamente siempre que la aplicación de funciones se esté ejecutando y en buen estado.
  • Valores devueltos : las funciones de entidad no admiten valores devueltos. Hay API específicas que se pueden usar para guardar el estado o devolver valores a orquestaciones.

Los cambios de estado realizados en una entidad durante su ejecución se conservarán automáticamente una vez completada la ejecución.

Para obtener más información y ejemplos sobre cómo definir e interactuar con desencadenadores de entidad, consulte la documentación de Durable Entities .

Cliente institucional

El enlace de cliente de entidad permite desencadenar de manera asincrónica las funciones de entidad. Estas funciones se conocen a veces como funciones cliente.

Puede enlazar con el cliente de entidad mediante el atributo DurableClientAttribute de .NET en las funciones de biblioteca de clases .NET.

Nota:

[DurableClientAttribute] también se puede usar para enlazar con el cliente de orquestación.

El cliente de entidad se define mediante el siguiente objeto JSON en la bindings matriz de 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 : se usa en escenarios en los que varias aplicaciones de función comparten la misma cuenta de almacenamiento, pero deben aislarse entre sí. Si no se especifica, se usa el valor predeterminado de host.json . Este valor debe coincidir con el valor usado por las funciones de entidad de destino.
  • connectionName : el nombre de una configuración de aplicación que contiene una cadena de conexión de la cuenta de almacenamiento. La cuenta de almacenamiento representada por esta cadena de conexión debe ser la misma que usan las funciones de entidad de destino. Si no se especifica, se usa la cadena de conexión de la cuenta de almacenamiento predeterminada para la aplicación de funciones.

Nota:

En la mayoría de los casos, se recomienda omitir las propiedades opcionales y confiar en el comportamiento predeterminado.

La forma en que se define un cliente de entidad depende del modelo de programación elegido.

Uso del decorador durable_client_input directamente en el código de función de Python.

Nota:

Las entidades clientes aún no se admiten para Java.

Para obtener más información y ejemplos sobre la interacción con entidades como cliente, consulte la documentación de Durable Entities .

configuración de host.json

Configuración de Durable Functions.

Nota:

Todas las versiones principales de Durable Functions son compatibles con todas las versiones del runtime de Azure Functions. Sin embargo, el esquema de la configuración de host.json es ligeramente diferente en función de la versión del runtime de Azure Functions y de la versión de la extensión de Durable Functions que se use. Los ejemplos siguientes son para Azure Functions 2.0 y 3.0. En ambos ejemplos, si se usa Azure Functions 1.0, la configuración disponible es la misma, pero la sección "durableTask" de host.json debería ir en la raíz de la configuración del archivo, en lugar de como un campo de "extensions".

{
 "extensions": {
  "durableTask": {
    "hubName": "MyTaskHub",
    "storageProvider": {
      "connectionStringName": "AzureWebJobsStorage",
      "controlQueueBatchSize": 32,
      "controlQueueBufferThreshold": 256,
      "controlQueueVisibilityTimeout": "00:05:00",
      "maxQueuePollingInterval": "00:00:30",
      "partitionCount": 4,
      "trackingStoreConnectionStringName": "TrackingStorage",
      "trackingStoreNamePrefix": "DurableTask",
      "useLegacyPartitionManagement": false,
      "useTablePartitionManagement": 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",
          "Completed",
          "Failed",
          "Terminated"
        ]
      }
    },
    "maxConcurrentActivityFunctions": 10,
    "maxConcurrentOrchestratorFunctions": 10,
    "maxConcurrentEntityFunctions": 10,
    "extendedSessionsEnabled": false,
    "extendedSessionIdleTimeoutInSeconds": 30,
    "useAppLease": true,
    "useGracefulShutdown": false,
    "maxEntityOperationBatchSize": 50,
    "maxOrchestrationActions": 100000,
    "storeInputsInOrchestrationHistory": false
  }
 }
}

Los nombres de la central de tareas deben empezar por una letra y estar formados únicamente por letras y números. Si no se especifica, el nombre predeterminado de la central de tareas de la aplicación de función es TestHubName. Para más información, consulte el artículo sobre las centrales de tareas.

Propiedad Predeterminado Descripción
Nombre del Hub TestHubName (DurableFunctionsHub si usa Durable Functions 1.x) Se pueden usar nombres de central de tareas alternativos para aislar varias aplicaciones de Durable Functions unas de otras, incluso si usan el mismo back-end de almacenamiento.
controlQueueBatchSize 32 El número de mensajes que se van a extraer a la vez de la cola de control.
controlQueueBufferThreshold Plan de consumo para Python: 32
Plan de consumo para otros idiomas: 128
Plan dedicado/Premium: 256
Número de mensajes de la cola de control que se pueden almacenar en búfer en la memoria a la vez, momento en que el distribuidor esperará para quitar cualquier mensaje adicional de la cola. En algunas situaciones, reducir este valor puede reducir significativamente el consumo de memoria.
número de particiones 4 El recuento de particiones para la cola de control. Puede ser un entero positivo comprendido entre 1 y 16. Cambiar este valor requiere configurar un nuevo centro de tareas.
controlQueueVisibilityTimeout 5 minutos El tiempo de espera de visibilidad de los mensajes de la cola de control quitados de la cola.
workItemQueueVisibilityTimeout 5 minutos El tiempo de espera de visibilidad de los mensajes de la cola de elementos de trabajo quitados de la cola.
maxConcurrentActivityFunctions Plan de consumo: 10
Plan dedicado/Premium: 10 veces el número de procesadores en la máquina actual
El número máximo de funciones de actividad que se pueden procesar simultáneamente en una única instancia de host.
maxConcurrentOrchestratorFunctions Plan de consumo: 5
Plan dedicado/Premium: 10 veces el número de procesadores en la máquina actual
El número máximo de funciones de Orchestrator que se pueden procesar simultáneamente en una única instancia de host.
maxConcurrentEntityFunctions Plan de consumo: 5
Plan dedicado/Premium: 10 veces el número de procesadores en la máquina actual
Número máximo de funciones de entidad que se pueden procesar simultáneamente en una sola instancia de host. Esta configuración solo es aplicable cuando se usa el programador de tareas durable. De lo contrario, el número máximo de ejecuciones de entidades simultáneas se limita a maxConcurrentOrchestratorFunctions.
maxQueuePollingInterval 30 segundos Intervalo de sondeo de cola de elementos de trabajo y control máximo en formato hh:mm:ss:. Los valores más altos pueden provocar mayores latencias de procesamiento de mensajes. Los valores más bajos pueden provocar mayores costos de almacenamiento debido al aumento de transacciones de almacenamiento.
connectionName (2.7.0 y versiones posteriores)
connectionStringName (2.x)
azureStorageConnectionStringName (1.x)
AzureWebJobsStorage Nombre de una configuración de aplicación o de una colección de configuraciones que especifica cómo conectarse a los recursos subyacentes de Azure Storage. Cuando se proporciona una única configuración de aplicación, debe ser una cadena de conexión de Azure Storage.
trackingStoreConnectionName (2.7.0 y versiones posteriores)
trackingStoreConnectionStringName
Nombre de una configuración de aplicación o colección de configuraciones que especifica cómo conectarse a las tablas de historial e instancias. Cuando se proporciona una única configuración de aplicación, debe ser una cadena de conexión de Azure Storage. Si no se especifica, se usa las conexiones connectionStringName (Durable 2.x) o azureStorageConnectionStringName (Durable 1.x).
trackingStoreNamePrefix Prefijo que se usará para las tablas de historial e instancias cuando se especifica trackingStoreConnectionStringName. Si no se establece, el valor de prefijo predeterminado será DurableTask. Si trackingStoreConnectionStringName no se especifica, las tablas Historial e Instancias usarán el hubName valor como prefijo y se omitirá cualquier configuración de trackingStoreNamePrefix .
traceInputsAndOutputs falso Un valor que indica si se realizará el seguimiento de las entradas y salidas de las llamadas de función. El comportamiento predeterminado al realizar el seguimiento de eventos de ejecución de funciones es incluir el número de bytes en las entradas y salidas serializadas de las llamadas de función. Este comportamiento proporciona información mínima sobre el aspecto de las entradas y salidas, sin sobredimensionar los registros o exponer por accidente información confidencial. Al establecer esta propiedad en true, el registro de funciones predeterminado registra todo el contenido de las entradas y salidas de función.
traceReplayEvents falso Un valor que indica si se debe escribir eventos de reproducción de orquestación en Application Insights.
eventGridTopicEndpoint La dirección URL de un punto de conexión de tema personalizado de Azure Event Grid. Cuando se establece esta propiedad, se publican eventos de notificación del ciclo de vida de orquestación en este punto de conexión. Esta propiedad admite la resolución de la configuración de la aplicación.
eventGridKeySettingName El nombre de la configuración de aplicación que contiene la clave usada para autenticarse con el tema personalizado de Azure Event Grid en EventGridTopicEndpoint.
eventGridPublishRetryCount 0 El número de veces que se debe reintentar si falla la publicación en el tema de Event Grid.
eventGridPublishRetryInterval 5 minutos Event Grid publica el intervalo de reintento en formato hh:mm:ss.
eventGridPublishEventTypes Lista de tipos de eventos que se van a publicar en Event Grid. Si no se especifica, se publicarán todos los tipos de evento. Los valores permitidos son Started, Completed, Failed y Terminated.
useAppLease cierto Si se establece en true, las aplicaciones requerirán que se adquiera una concesión de blob de nivel de aplicación antes de procesar los mensajes de la central de tareas. Para más información, consulte la documentación sobre la recuperación ante desastres y la distribución geográfica. Disponible a partir de la versión 2.3.0.
useLegacyPartitionManagement falso Cuando se establece en false, usa un algoritmo de administración de particiones que reduce la posibilidad de que se ejecute la función duplicada al realizar un escalado horizontal. Disponible a partir de la versión 2.3.0. No se recomienda establecer este valor como true.
useTablePartitionManagement true en versiones de extensión v3.x
false en versiones de extensión v2.x
Cuando se establece en true, usa un algoritmo de administración de particiones diseñado para reducir los costos de las cuentas de Azure Storage V2. Disponible a partir de WebJobs.Extensions.DurableTask v2.10.0. El uso de esta configuración con identidad administrada requiere WebJobs.Extensions.DurableTask v3.x o posterior, o las versiones Worker.Extensions.DurableTask anteriores a v1.2.x o posteriores.
useGracefulShutdown falso (Versión preliminar) Habilite el apagado correcto para reducir la posibilidad de que se produzcan errores de apagado del host en las ejecuciones de función en proceso.
maxEntityOperationBatchSize(2.6.1) Plan de consumo: 50
Plan dedicado/Premium: 5000
Número máximo de operaciones de entidad que se procesan como un lote. Si se establece en 1, el procesamiento por lotes está deshabilitado y cada mensaje de operación se procesa mediante una invocación de función independiente.
storeInputsInOrchestrationHistory falso Cuando se establece en true, indica a Durable Task Framework que guarde las entradas de actividad en la tabla de historial. Esto permite mostrar las entradas de función de actividad al consultar el historial de orquestaciones.
maxGrpcMessageSizeInBytes 4194304 Valor entero que establece el tamaño máximo, en bytes, de mensajes que puede recibir el cliente gRPC para DurableTaskClient. Esto se aplica a Durable Functions .NET Isolated y Java.
grpcHttpClientTimeout 100 segundos Establece el tiempo de espera del cliente HTTP usado por el cliente gRPC en Durable Functions, que actualmente se admite para aplicaciones aisladas de .NET (.NET 6 y versiones posteriores) y para Java.

Muchos de estos valores son para optimizar el rendimiento. Para obtener más información, vea Rendimiento y escalado.

Pasos siguientes