Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
A extensão Durable Functions introduz três vinculações de gatilho que controlam a execução de funções de orquestrador, entidade e atividade. Ele também introduz uma vinculação de saída que atua como um cliente para o tempo de execução do Durable Functions.
Escolha sua linguagem de desenvolvimento de Funções Duráveis na parte superior do artigo.
Importante
Este artigo dá suporte a modelos de programação Python v1 e Python v2 para Durable Functions.
Modelo de programação do Python v2
O Durable Functions tem suporte no novo modelo de programação python v2. Para usar o modelo v2, você deve instalar o SDK do Durable Functions, que é o pacote azure-functions-durable
PyPI, versão 1.2.2
ou uma versão posterior. Você também deve verificar host.json
para ter certeza de que seu aplicativo está referenciando Extension Bundles versão 4.x para usar o modelo v2 com Durable Functions.
Você pode fornecer comentários e sugestões no repositório do SDK do Durable Functions para Python.
Gatilho de orquestração
O gatilho de orquestração permite criar funções de orquestrador duráveis. Esse gatilho é executado quando uma nova instância de orquestração é agendada e quando uma instância de orquestração existente recebe um evento. Exemplos de eventos que podem acionar funções do orquestrador incluem expirações de temporizador duráveis, respostas de função de atividade e eventos gerados por clientes externos.
Quando você cria funções no .NET, o gatilho de orquestração é configurado usando o atributo .NET OrchestrationTriggerAttribute .
Para Java, a @DurableOrchestrationTrigger
anotação é usada para configurar o gatilho de orquestração.
Quando você escreve funções de orquestrador, o gatilho de orquestração é definido pelo seguinte objeto JSON na bindings
matriz do arquivo function.json :
{
"name": "<Name of input parameter in function signature>",
"orchestration": "<Optional - name of the orchestration>",
"type": "orchestrationTrigger",
"direction": "in"
}
-
orchestration
é o nome da orquestração que os clientes devem usar quando desejam iniciar novas instâncias dessa função do orquestrador. Esta propriedade é opcional. Se não for especificado, o nome da função será usado.
O Azure Functions dá suporte a dois modelos de programação para Python. A maneira como você define um gatilho de orquestração depende do modelo de programação escolhido.
O modelo de programação do Python v2 permite que você defina um gatilho de orquestração usando o orchestration_trigger
decorador diretamente no código da função Python.
No modelo v2, os gatilhos e associações do Durable Functions são acessados a partir de uma instância de DFApp
, que é uma subclasse de FunctionApp
e, além disso, exporta decoradores específicos para o Durable Functions.
Internamente, essa vinculação de gatilho pesquisa o armazenamento durável configurado para novos eventos de orquestração, como eventos de início de orquestração, eventos de expiração de temporizador durável, eventos de resposta de função de atividade e eventos externos gerados por outras funções.
Comportamento desencadeador
Aqui estão algumas anotações sobre o gatilho de orquestração:
- Threading único - Um único thread do despachante é usado para a execução de todas as funções do orquestrador em uma única instância do host. Por esse motivo, é importante garantir que o código de função do orquestrador seja eficiente e não execute nenhuma E/S. Também é importante garantir que essa thread não execute nenhum trabalho assíncrono, exceto quando estiver esperando por tipos de tarefas específicos do Durable Functions.
- Manipulação de mensagens suspeitas – não há suporte para mensagens suspeitas nos gatilhos de orquestração.
- Visibilidade da mensagem - As mensagens de gatilho de orquestração são retiradas da fila e mantidas invisíveis por um período configurável. A visibilidade dessas mensagens é renovada automaticamente enquanto o aplicativo de função estiver em execução e íntegro.
- Valores retornados – os valores retornados são serializados para JSON e mantidos na tabela de histórico de orquestração no armazenamento de Tabelas do Azure. Esses valores retornados podem ser consultados pela associação de cliente de orquestração, descrita posteriormente.
Aviso
As funções de orquestrador nunca devem usar associações de entrada ou saída diferentes da associação de gatilho de orquestração. Fazer isso pode causar problemas com a extensão Durable Task porque essas vinculações podem não obedecer às regras de thread único e I/O. Se quiser usar outras vinculações, adicione-as a uma função de atividade chamada pela sua função de orquestrador. Para obter mais informações sobre restrições de codificação para funções de orquestrador, consulte a documentação de restrições de código de função do Orchestrator .
Aviso
As funções do orquestrador nunca devem ser declaradas async
.
Uso de gatilho
A vinculação do gatilho de orquestração suporta entradas e saídas. Aqui estão algumas coisas para saber sobre o tratamento de entrada e saída:
- entradas – gatilhos de orquestração podem ser invocados com entradas, que são acessadas por meio do objeto de entrada de contexto. Todas as entradas devem ser serializáveis em JSON.
- saídas – os gatilhos de orquestração dão suporte a valores de saída e de entrada. O valor retornado da função é usado para atribuir o valor de saída e deve ser serializável em JSON.
Exemplo de gatilho
O código de exemplo a seguir mostra como é a forma mais simples da função de orquestração "Olá, Mundo". Este exemplo de orquestrador na verdade não agenda nenhuma tarefa.
O atributo específico usado para definir o gatilho depende se você está executando suas funções C# em processo ou em um processo de trabalho isolado.
[FunctionName("HelloWorld")]
public static string Run([OrchestrationTrigger] IDurableOrchestrationContext context)
{
string name = context.GetInput<string>();
return $"Hello {name}!";
}
Observação
O código anterior é para Durable Functions 2.x. Para o Durable Functions 1.x, você deve usar DurableOrchestrationContext
em vez de IDurableOrchestrationContext
. Para obter mais informações sobre as diferenças entre as versões, consulte o artigo Versões Funções Duráveis.
const df = require("durable-functions");
module.exports = df.orchestrator(function*(context) {
const name = context.df.getInput();
return `Hello ${name}!`;
});
Observação
A biblioteca durable-functions
cuida de chamar o método síncrono context.done
quando a função do gerador sai.
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));
}
A maioria das funções do orquestrador chamam funções de atividade, então aqui está um exemplo "Olá, Mundo" que demonstra como chamar uma função de atividade:
[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;
}
Observação
O código anterior é para Durable Functions 2.x. Para o Durable Functions 1.x, você deve usar DurableOrchestrationContext
em vez de IDurableOrchestrationContext
. Para obter mais informações sobre as diferenças entre versões, confira o artigo Versões do 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;
}
Gatilho de atividade
O gatilho de atividade permite que você crie funções que são chamadas por funções do orquestrador, conhecidas como funções de atividade.
O gatilho de atividade é configurado usando o atributo .NET ActivityTriggerAttribute .
O gatilho da atividade é configurado usando a @DurableActivityTrigger
anotação.
O gatilho de atividade é definido pelo seguinte objeto JSON na bindings
matriz de function.json:
{
"name": "<Name of input parameter in function signature>",
"activity": "<Optional - name of the activity>",
"type": "activityTrigger",
"direction": "in"
}
-
activity
é o nome da atividade. Esse valor é o nome que as funções de orquestrador usam para invocar essa função de atividade. Esta propriedade é opcional. Se não for especificado, o nome da função será usado.
A maneira como você define um gatilho de atividade depende do modelo de programação escolhido.
Internamente, essa vinculação de gatilho pesquisa o armazenamento durável configurado em busca de novos eventos de execução de atividade.
Comportamento desencadeador
Aqui estão algumas anotações sobre o gatilho de atividade:
- Threading - Diferentemente do gatilho de orquestração, os gatilhos de atividade não têm nenhuma restrição quanto a encadeamento ou E/S. Eles podem ser tratados como funções regulares.
- Manipulação de mensagens de envenenamento - Não há suporte para mensagens de envenenamento em gatilhos de atividade.
- Visibilidade da mensagem - As mensagens de gatilho de atividade são retiradas da fila e mantidas invisíveis por um período configurável. A visibilidade dessas mensagens é renovada automaticamente enquanto o aplicativo de função estiver em execução e íntegro.
- Valores retornados – os valores retornados são serializados para JSON e mantidos no repositório durável configurado.
Uso de gatilho
A vinculação do gatilho de atividade suporta entradas e saídas, assim como o gatilho de orquestração. Aqui estão algumas coisas para saber sobre o tratamento de entrada e saída:
- entradas - Os gatilhos de atividade podem ser invocados com entradas de uma função de orquestrador. Todas as entradas devem ser serializáveis em JSON.
- saídas – as funções de atividade dão suporte a valores de saída e de entrada. O valor retornado da função é usado para atribuir o valor de saída e deve ser serializável em JSON.
-
metadata - .As funções de atividade NET podem ser vinculadas a um parâmetro
string instanceId
para obter o ID da instância da orquestração de chamada.
Exemplo de gatilho
O código de exemplo a seguir mostra a aparência de uma função de atividade simples SayHello
.
[FunctionName("SayHello")]
public static string SayHello([ActivityTrigger] IDurableActivityContext helloContext)
{
string name = helloContext.GetInput<string>();
return $"Hello {name}!";
}
O tipo de parâmetro padrão para a associação .NET ActivityTriggerAttribute
é IDurableActivityContext (ou DurableActivityContext for Durable Functions v1). No entanto, os gatilhos de atividade do .NET também dão suporte à associação diretamente aos tipos serializáveis JSON (incluindo tipos primitivos), de modo que a mesma função possa ser simplificada da seguinte maneira:
[FunctionName("SayHello")]
public static string SayHello([ActivityTrigger] string name)
{
return $"Hello {name}!";
}
module.exports = async function(context) {
return `Hello ${context.bindings.name}!`;
};
As associações JavaScript também podem ser passadas como parâmetros extras, portanto, a mesma função pode ser simplificada da seguinte maneira:
module.exports = async function(context, name) {
return `Hello ${name}!`;
};
param($name)
"Hello $name!"
@FunctionName("SayHello")
public String sayHello(@DurableActivityTrigger(name = "name") String name) {
return String.format("Hello %s!", name);
}
Usando associações de entrada e saída
Você pode usar vínculos regulares de entrada e saída junto com o vínculo de gatilho de atividade.
Por exemplo, você pode levar a entrada para a sua associação de atividades e enviar uma mensagem para um hub de eventos usando a associação de saída dos Hubs de Eventos:
{
"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 orquestração
A associação de cliente de orquestração permite que você escreva funções que interagem com funções de orquestrador. Essas funções geralmente são conhecidas como funções de cliente. Por exemplo, você pode atuar em instâncias de orquestração das seguintes maneiras:
- Iniciá-las.
- Consulte o status deles.
- Encerrá-las.
- Enviar eventos a elas durante sua execução.
- Limpar o histórico de instância.
Você pode vincular ao cliente de orquestração usando o atributo DurableClientAttribute (OrchestrationClientAttribute em Durable Functions v1.x).
Você pode vincular ao cliente de orquestração usando a @DurableClientInput
anotação.
O gatilho do cliente durável é definido pelo seguinte objeto JSON no 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
- Usado em cenários em que vários aplicativos de funções compartilham a mesma conta de armazenamento, mas precisam ser isolados uns dos outros. Se não for especificado, é usado o valor padrão dehost.json
. Esse valor deve corresponder ao valor usado pelas funções de orquestrador de destino. -
connectionName
- O nome de uma configuração de aplicativo que contém uma cadeia de conexão de conta de armazenamento. A conta de armazenamento representada por essa cadeia de conexão deve ser a mesma usada pelas funções de orquestrador de destino. Se não for especificado, a cadeia de conexão da conta de armazenamento padrão para o aplicativo de função será usada.
Observação
Na maioria dos casos, recomendamos que você omita essas propriedades e confie no comportamento padrão.
A maneira como você define um gatilho de cliente durável depende do modelo de programação escolhido.
Uso do cliente
Normalmente, você vincula-se a IDurableClient (DurableOrchestrationClient em Durable Functions v1.x), o que lhe dá acesso total a todas as APIs de cliente de orquestração suportadas pelo Durable Functions.
Normalmente, você se vincula à classe DurableClientContext
.
Você deve usar o SDK específico do idioma para obter acesso a um objeto cliente.
Aqui está um exemplo de função acionada por fila que inicia uma orquestração "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);
}
Observação
O código C# anterior é para Durable Functions 2.x. Para Durable Functions 1.x, você deve usar o atributo OrchestrationClient
em vez do atributo DurableClient
e deve usar o tipo de parâmetro DurableOrchestrationClient
em vez de IDurableOrchestrationClient
. Para obter mais informações sobre as diferenças entre as versões, consulte o artigo Versões Funções Duráveis.
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);
}
Mais detalhes sobre as instâncias iniciais podem ser encontrados no gerenciamento de instâncias.
Gatilho de entidade
Os gatilhos de entidade permitem criar funções de entidade. Esse gatilho oferece suporte ao processamento de eventos para uma instância de entidade específica.
Observação
Os gatilhos de entidade estão disponíveis a partir do Durable Functions 2.x.
Internamente, essa vinculação de gatilho pesquisa o armazenamento durável configurado em busca de novas operações de entidade que precisam ser executadas.
O gatilho de entidade é configurado usando o atributo .NET EntityTriggerAttribute.
O gatilho da entidade é definido pelo seguinte objeto JSON no bindings
matriz de function.json:
{
"name": "<Name of input parameter in function signature>",
"entityName": "<Optional - name of the entity>",
"type": "entityTrigger",
"direction": "in"
}
Por padrão, o nome de uma entidade é o nome da função.
Observação
Ainda não há suporte para os gatilhos de entidade em Java.
A maneira como você define um gatilho de entidade depende do modelo de programação escolhido.
Comportamento desencadeador
Veja algumas observações sobre o gatilho de entidade:
- Rosca única: Um único thread do despachante é usado para processar operações para uma entidade específica. Se várias mensagens forem enviadas para uma única entidade simultaneamente, as operações serão processadas uma a cada vez.
- Manipulação de mensagens venenosas - Não há suporte para mensagens de envenenamento em gatilhos de entidade.
- Visibilidade da mensagem - As mensagens de gatilho de entidade são retiradas da fila e mantidas invisíveis por um período configurável. A visibilidade dessas mensagens é renovada automaticamente enquanto o aplicativo de função estiver em execução e íntegro.
- Valores retornados – as funções de entidade não dão suporte a valores retornados. Há APIs específicas que podem ser usadas para salvar o estado ou passar valores de volta para orquestrações.
Todas as alterações de estado feitas em uma entidade durante sua execução serão mantidas automaticamente após a conclusão da execução.
Para obter mais informações e exemplos sobre como definir e interagir com gatilhos de entidade, consulte a documentação de Entidades Duráveis .
Cliente de entidade
A vinculação do cliente de entidade permite que você acione *funções de entidade de forma assíncrona Essas funções às vezes são conhecidas como funções de cliente.
Você pode associar-se ao cliente da entidade usando o atributo DurableClientAttribute .NET em funções da biblioteca de classes do .NET.
Observação
O [DurableClientAttribute]
também pode ser usado para vincular ao cliente de orquestração.
O cliente de entidade é definido pelo seguinte objeto JSON na 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
- Usado em cenários em que vários aplicativos de funções compartilham a mesma conta de armazenamento, mas precisam ser isolados uns dos outros. Se não for especificado, é usado o valor padrão dehost.json
. Esse valor deve corresponder ao valor usado pelas funções de entidade de destino. -
connectionName
- O nome de uma configuração de aplicativo que contém uma cadeia de conexão de conta de armazenamento. A conta de armazenamento representada por essa cadeia de conexão deve ser a mesma usada pelas funções de entidade de destino. Se não for especificado, a cadeia de conexão da conta de armazenamento padrão para o aplicativo de função será usada.
Observação
Na maioria dos casos, recomendamos que você omita as propriedades opcionais e confie no comportamento padrão.
A maneira como você define um cliente de entidade depende do modelo de programação escolhido.
Observação
Os clientes de entidade ainda não têm suporte para Java.
Para obter mais informações e exemplos sobre como interagir com entidades como cliente, consulte a documentação de Entidades Duráveis .
configurações de host.json
Definições de configuração para Funções Duráveis.
Observação
Todas as versões principais das Durable Functions são compatíveis com todas as versões do Azure Functions Runtime. No entanto, o esquema da configuração host.json é ligeiramente diferente dependendo da versão do Azure Functions Runtime e da versão da extensão das Durable Functions que você usa. Os exemplos a seguir são referentes ao uso com o Azure Functions 2.0 e 3.0. Em ambos os exemplos, se você estiver usando o Azure Functions 1.0, as configurações disponíveis serão as mesmas, mas a seção "durableTask" do host.json deverá ir para a raiz da configuração do host.json em vez de como um campo em "extensões".
{
"extensions": {
"durableTask": {
"hubName": "MyTaskHub",
"defaultVersion": "1.0",
"versionMatchStrategy": "CurrentOrOlder",
"versionFailureStrategy": "Reject",
"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",
"QueueClientMessageEncoding": "UTF8"
},
"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
}
}
}
Nomes de hubs de tarefas devem começar com uma letra e devem ser compostos somente por letras e números. Se não for especificado, o nome padrão do hub de tarefas para um aplicativo de função será TestHubName. Para obter mais informações, consulte Hubs de tarefas.
Propriedade | Padrão | Descrição |
---|---|---|
nome do hub | TestHubName (DurableFunctionsHub se estiver usando o Durable Functions 1.x) | Nomes alternativos para hub de tarefas podem ser usados para isolar vários aplicativos de Funções Duráveis uns dos outros, mesmo se eles estiverem usando o mesmo back-end de armazenamento. |
defaultVersion | A versão padrão a ser atribuída a novas instâncias de orquestração. Quando especificadas, novas instâncias de orquestração são permanentemente associadas a esse valor de versão. Usado pelo recurso de controle de versão de orquestração para habilitar cenários como implantações de tempo de inatividade zero com alterações interruptivas. Você pode usar qualquer valor de string para a versão. | |
versionMatchStrategy | CurrentOrOlder | Determina como as versões de orquestração são correspondidas ao carregar funções de orquestrador. Os valores válidos são None , Strict e CurrentOrOlder . Para obter explicações detalhadas, consulte o versionamento de orquestração. |
versionFailureStrategy | Rejeitar | Determina o que acontece quando uma versão de orquestração não corresponde à atual defaultVersion . Os valores válidos são Reject e Fail . Para obter explicações detalhadas, consulte o versionamento de orquestração. |
controlQueueBatchSize | 32 | O número de mensagens para efetuar pull da fila de controle por vez. |
controlQueueBufferThreshold |
Plano de consumo para Python: 32 Plano de consumo para outros idiomas: 128 Plano Dedicado/Premium: 256 |
O número de mensagens de fila de controle que podem ser armazenadas em buffer na memória por vez. Nesse ponto, o dispatcher aguardará antes de retirar da fila qualquer mensagem adicional. Em algumas situações, reduzir esse valor pode reduzir significativamente o consumo de memória. |
partitionCount | 4 | A contagem de partição para a fila de controle. Pode ser um número inteiro positivo entre 1 e 16. Alterar esse valor requer a configuração de um novo hub de tarefas. |
controlQueueVisibilityTimeout | 5 minutos | O limite de tempo de visibilidade das mensagens de remoção da fila de controle. |
workItemQueueVisibilityTimeout | 5 minutos | O limite de tempo de visibilidade das mensagens de remoção da fila de item de trabalho. |
maxConcurrentActivityFunctions |
Plano de Consumo: 10 Plano Dedicado/Premium: dez vezes o número de processadores do computador atual |
O número máximo de funções de atividade que podem ser processadas simultaneamente em uma única instância de host. |
maxConcurrentOrchestratorFunctions |
Plano de Consumo: 5 Plano Dedicado/Premium: dez vezes o número de processadores do computador atual |
O número máximo de funções do orquestrador que podem ser processadas simultaneamente em uma única instância do host. |
maxConcurrentEntityFunctions |
Plano de Consumo: 5 Plano Dedicado/Premium: dez vezes o número de processadores do computador atual |
O número máximo de funções de entidade que podem ser processadas simultaneamente em uma única instância de host. Essa configuração só é aplicável ao usar o agendador de tarefas durável. Caso contrário, o número máximo de execuções simultâneas de entidades é limitado a maxConcurrentOrchestratorFunctions . |
maxQueuePollingInterval | 30 segundos | O intervalo máximo de controle e pesquisa da fila de itens de trabalho no formato hh:mm:ss. Valores mais altos podem resultar em latências de processamento de mensagens mais altas. Valores mais baixos podem resultar em custos de armazenamento maiores devido a um maior número de transações de armazenamento. |
connectionName (2.7.0 e posteriores) connectionStringName (2.x) azureStorageConnectionStringName (1.x) |
AzureWebJobsStorage | O nome de uma configuração de um aplicativo ou de uma coleção de configurações que especifica como se conectar aos recursos subjacentes do Armazenamento do Azure. Quando é informada uma configuração de aplicativo único, é necessário que ela seja uma cadeia de conexão do Armazenamento do Microsoft Azure. |
trackingStoreConnectionName (2.7.0 e versões superiores) trackingStoreConnectionStringName |
O nome de uma configuração de aplicativo ou de uma coleção de configurações que especifica como se conectar às tabelas História e Instâncias. Quando é informada uma configuração de aplicativo único, é necessário que ela seja uma cadeia de conexão do Armazenamento do Microsoft Azure. Se não for especificado, a conexão connectionStringName (Durable 2.x) ou azureStorageConnectionStringName (Durable 1.x) será usada. |
|
trackingStoreNamePrefix | O prefixo a ser usado para as tabelas de histórico e instâncias quando trackingStoreConnectionStringName for especificado. Se não estiver definido, o valor de prefixo padrão será DurableTask . Se trackingStoreConnectionStringName não for especificado, então as tabelas Histórico e Instâncias usarão o valor de hubName como seu prefixo, e qualquer configuração de trackingStoreNamePrefix será ignorada. |
|
traceInputsAndOutputs | falso | Um valor que indica se as entradas e saídas de chamadas de função serão rastreadas. O comportamento padrão durante o rastreamento de eventos de execução de função é incluir o número de bytes nas entradas e saídas serializadas para chamadas de função. Esse comportamento fornece um mínimo de informações sobre como são as entradas e saídas sem sobrecarregar os logs ou expor inadvertidamente informações confidenciais. A definição dessa propriedade como true faz com que o log de função padrão registre todo o conteúdo de entradas e saídas da função. |
traceReplayEvents | falso | Um valor que indica se é necessário gravar eventos de reprodução de orquestração para o Application Insights. |
eventGridTopicEndpoint | A URL de um ponto de extremidade de tópico personalizado do Grade de Eventos do Azure. Quando essa propriedade for definida, eventos de notificação de ciclo de vida de orquestração serão publicados para este endpoint. Essa propriedade oferece suporte à resolução das configurações do aplicativo. | |
eventGridKeySettingName | O nome da configuração de aplicativo que contém a chave usada para autenticar com o tópico personalizado da Grade de Eventos do Azure em EventGridTopicEndpoint . |
|
eventGridPublishRetryCount | 0 | O número de vezes a tentar novamente se a publicação no tópico da Grade de Eventos falhar. |
eventGridPublishRetryInterval | 5 minutos | A Grade de Eventos publica o intervalo de repetição no formato hh:mm:ss. |
eventGridPublishEventTypes | Uma lista de tipos de eventos a serem publicados na Grade de Eventos. Se não for especificada, todos os tipos de evento serão publicados. Os valores permitidos incluem Started , Completed , Failed , Terminated . |
|
useAppLease | verdadeiro | Quando configurado como true , os aplicativos exigirão adquirir uma concessão de blob de nível de aplicativo antes de processar mensagens do hub de tarefas. Para obter mais informações, consulte a documentação recuperação de desastre e distribuição geográfica. Disponível a partir da v2.3.0. |
useLegacyPartitionManagement | falso | Quando definido como false , ele usa um algoritmo de gerenciamento de partição que reduz a possibilidade de execução de função duplicada ao expandir. Disponível a partir da v2.3.0.
Não é recomendável definir true esse valor. |
useTablePartitionManagement |
true nas versões de extensão v3.xfalse nas versões de extensão v2.x |
Quando definido como true , usa um algoritmo de gerenciamento de partição projetado para reduzir os custos das contas do Armazenamento do Microsoft Azure V2. Disponível a partir de WebJobs.Extensions.DurableTask v2.10.0. Usar essa configuração com identidade gerenciada requer Versões WebJobs.Extensions.DurableTask v3.x ou posterior, ou Worker.Extensions.DurableTask anteriores à v1.2.x ou posterior. |
useGracefulShutdown | falso | (Versão Prévia) Habilite o desligamento normal para reduzir a chance de desligamentos de host falharem em execuções de função em processo. |
maxEntityOperationBatchSize(2.6.1) |
Plano de consumo: 50 Plano Dedicado/Premium: 5000 |
O número máximo de operações de entidade que são processadas como um lote. Se definido como 1, o processamento em lote será desativado e cada mensagem de operação será processada por uma invocação de função separada. |
storeInputsInOrchestrationHistory | falso | Quando definido como true , indica para o Framework de Tarefas Duráveis salvar entradas de atividade na tabela de histórico. Isso permite a exibição de dados de entrada das funções de atividade ao consultar o histórico de orquestração. |
maxGrpcMessageSizeInBytes | 4194304 | Um valor inteiro que define o tamanho máximo, em bytes, das mensagens que o cliente gRPC para DurableTaskClient pode receber. Isso se aplica a Funções Duráveis .NET Isoladas e Java. |
grpcHttpClientTimeout | 100 segundos | Define o tempo limite para o cliente HTTP usado pelo cliente gRPC no Durable Functions, que atualmente tem suporte para aplicativos isolados do .NET (.NET 6 e versões posteriores) e para Java. |
QueueClientMessageEncoding | UTF8 | Especifica a estratégia de codificação para mensagens de fila do Armazenamento do Azure. Os valores válidos são UTF8 e Base64. Aplica-se ao usar Microsoft.Azure.WebJobs.Extensions.DurableTask 3.4.0 ou superior, ou Microsoft.Azure.Functions.Worker.Extensions.DurableTask 1.7.0 ou superior. |
Muitas dessas configurações servem para otimizar o desempenho. Para obter mais informações, veja Desempenho e dimensionamento.