Поделиться через


Привязки для долговечных функций (Функции Azure)

Расширение Устойчивых функций представляет три триггерные привязки, которые управляют выполнением функций оркестратора, сущностей и активностей. Она также представляет выходную привязку, которая выступает в качестве клиента для среды выполнения устойчивых функций.

Выберите язык разработки устойчивых функций в верхней части статьи.

Это важно

В этой статье поддерживаются модели программирования Python версии 1 и Python версии 2 для устойчивых функций.

Модель программирования Python версии 2

Устойчивые функции поддерживаются в новой модели программирования Python версии 2. Чтобы использовать модель версии 2, необходимо установить пакет SDK устойчивых функций, который является пакетом azure-functions-durablePyPI, версией 1.2.2 или более поздней версией. Кроме того, необходимо проверить host.json, что ваше приложение ссылается на пакеты расширений версии 4.x, чтобы использовать модель версии 2 с Durable Functions.

Вы можете предоставить отзывы и предложения в пакете SDK устойчивых функций для репозитория Python.

Триггер оркестрации

Триггер оркестрации позволяет создавать устойчивые функции оркестратора. Этот триггер выполняется в момент, когда планируется новый экземпляр оркестрации, и в момент, когда существующий экземпляр оркестрации получает событие. Примеры событий, которые могут активировать функции оркестратора, включают устойчивые сроки действия таймера, ответы функции действия и события, создаваемые внешними клиентами.

При создании функций в .NET триггер оркестрации настраивается с помощью атрибута OrchestrationTriggerAttribute .NET.

Для Java аннотация @DurableOrchestrationTrigger используется для настройки триггера оркестрации.

При записи функций оркестратора триггер оркестрации определяется следующим объектом JSON в массиве bindings файла function.json :

{
    "name": "<Name of input parameter in function signature>",
    "orchestration": "<Optional - name of the orchestration>",
    "type": "orchestrationTrigger",
    "direction": "in"
}
  • orchestration — это имя оркестрации, которую клиенты должны использовать при запуске новых экземпляров этой функции оркестратора. Это свойство является необязательным. Если это не указано, используется имя функции.

Функции Azure поддерживает две модели программирования для Python. Способ определения триггера оркестрации зависит от выбранной модели программирования.

Модель программирования Python версии 2 позволяет определить триггер оркестрации с помощью orchestration_trigger декоратора непосредственно в коде функции Python.

В модели версии 2 доступ к триггерам и привязкам долговременных функций осуществляется из экземпляра DFApp, который является подклассом FunctionApp, экспортирующего также декораторы, специфичные для долговременных функций.

Внутри этого триггера привязка опрашивает настроенное устойчивое хранилище для новых событий оркестрации, таких как события запуска оркестрации, события истечения срока действия устойчивого таймера, события отклика функции активности и внешние события, вызванные другими функциями.

Поведение триггера

Ниже приведены некоторые заметки о триггере оркестрации:

  • Однопотоковый режим — один поток используется для выполнения всех функций оркестратора на одном хостовом экземпляре. По этой причине важно убедиться, что код функции оркестратора эффективен и не выполняет операции ввода-вывода. Кроме того, важно убедиться, что этот поток не выполняет асинхронную работу, за исключением случаев ожидания типов задач, связанных с Durable Functions.
  • Обработка отравляющих сообщений — в триггерах оркестрации отсутствует поддержка отравляющих сообщений.
  • Видимость сообщений — сообщения триггера оркестрации извлекаются из очереди и остаются невидимыми в течение настраиваемого времени. Видимость этих сообщений обновляется автоматически, пока приложение-функция работает исправно.
  • Возвращаемые значения. Возвращаемые значения сериализуются в JSON и сохраняются в таблице журнала оркестрации в хранилище таблиц Azure. Эти возвращаемые значения можно запросить с помощью привязки клиентского оркестратора, которая будет описана далее.

Предупреждение

Функции оркестратора никогда не должны использовать входные или выходные привязки, отличные от привязки триггера оркестрации. Это может потенциально привести к проблемам с расширением Durable Task, поскольку эти привязки могут не подчиняться правилам однопоточности и ввода-вывода. Если вы хотите использовать другие привязки, добавьте их в функцию действия, вызванную из функции оркестратора. Дополнительные сведения о ограничениях кода для функций оркестратора см. в документации по ограничениям кода функции Orchestrator .

Предупреждение

Функции оркестратора никогда не должны объявляться async.

Использование триггера

Привязка (биндинг) триггера оркестрации поддерживает входные и выходные данные. Ниже приведены некоторые сведения о обработке входных и выходных данных:

  • входные данные — триггеры оркестрации можно вызывать с помощью входных данных, к которым обращается объект контекста. Все входные данные должны быть сериализуемыми в формате JSON.
  • выходные данные — триггеры оркестрации поддерживают как выходные значения, так и входные данные. Возвращаемое значение функции используется для назначения выходного значения и должно быть сериализуемым в формате JSON.

Пример триггера

В следующем примере кода показано, что может выглядеть простейшая функция оркестратора Hello World. Обратите внимание, что в этом примере оркестратор фактически не планирует никаких задач.

Конкретный атрибут, используемый для определения триггера, зависит от того, выполняете ли функции C# в процессе или в изолированном рабочем процессе.

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

Примечание.

Предыдущий код предназначен для устойчивых функций 2.x. Для Durable Functions 1.x необходимо использовать DurableOrchestrationContext вместо IDurableOrchestrationContext. Дополнительные сведения о различиях между версиями см. в статье о версиях устойчивых функций .

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

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

Примечание.

Библиотека durable-functions отвечает за вызов синхронного context.done метода при выходе функции генератора.

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

Большинство функций оркестратора вызывают функции действия, поэтому ниже приведен пример "Hello World", демонстрирующий вызов функции действия:

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

Примечание.

Предыдущий код предназначен для устойчивых функций 2.x. Для Durable Functions 1.x необходимо использовать DurableOrchestrationContext вместо IDurableOrchestrationContext. Дополнительные сведения о различиях между версиями см. в статье о версиях устойчивых функций .

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

Триггер действия

Триггер активности позволяет создавать функции, которые вызываются оркестратором, известные как функции активности.

Триггер действия настраивается с помощью атрибута ActivityTriggerAttribute .NET.

Триггер действия настраивается с помощью заметки @DurableActivityTrigger .

Триггер действия определяется следующим объектом JSON в массиве bindingsfunction.json:

{
    "name": "<Name of input parameter in function signature>",
    "activity": "<Optional - name of the activity>",
    "type": "activityTrigger",
    "direction": "in"
}
  • activity — имя действия. Это значение — имя, используемое функциями оркестратора для вызова этой функции действия. Это свойство является необязательным. Если это не указано, используется имя функции.

Способ определения триггера действия зависит от выбранной модели программирования.

Использование декоратора activity_trigger непосредственно в коде функции Python.

В этой триггерной привязке система опрашивает настроенное устойчивое хранилище на предмет новых событий выполнения активности.

Поведение триггера

Ниже приведены некоторые заметки о триггере действия:

  • Потоки — в отличие от триггера оркестрации, триггеры активности не имеют никаких ограничений по использованию потоков или операций ввода-вывода. Их можно рассматривать как обычные функции.
  • Обработка подозрительных сообщений — в триггерах действий нет поддержки отравляющего сообщения.
  • Видимость сообщений — сообщения триггера активности извлекаются и остаются невидимыми в течение настраиваемого периода. Видимость этих сообщений обновляется автоматически, пока приложение-функция работает исправно.
  • Возвращаемые значения — возвращаемые значения сериализуются в JSON и сохраняются в настроенном устойчивом хранилище.

Использование триггера

Привязка триггера действия поддерживает как входные данные, так и выходные, как и триггер оркестрации. Ниже приведены некоторые сведения о обработке входных и выходных данных:

  • входные данные — триггеры действий можно вызывать с помощью входных данных из функции оркестратора. Все входные данные должны быть сериализуемыми в формате JSON.
  • выходные данные — функции действий поддерживают выходные значения, а также входные данные. Возвращаемое значение функции используется для назначения выходного значения и должно быть сериализуемым в формате JSON.
  • метаданные - функции активностей в .NET могут связываться с string instanceId параметром, чтобы получить идентификатор экземпляра orchestration-вызова.

Пример триггера

В следующем примере кода показано, как выглядит простая SayHello функция действия.

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

Тип параметра по умолчанию для привязки .NET ActivityTriggerAttributeIDurableActivityContext (или DurableActivityContext для устойчивых функций версии 1). Однако триггеры действий .NET также поддерживают привязку непосредственно к сериализуемым типам JSON (включая примитивные типы), поэтому такая же функция может быть упрощена следующим образом:

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

Привязки JavaScript также могут передаваться в виде дополнительных параметров, поэтому такая же функция может быть упрощена следующим образом:

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

Использование входных и выходных привязок

В дополнение к привязке триггера действия можно использовать обычные входные и выходные привязки.

Например, можно использовать входные данные для привязки вашей активности и отправить сообщение в Концентратор событий с помощью выходной привязки Концентратора событий.

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

Клиент для оркестрации систем

Привязка клиента оркестрации позволяет создавать функции, взаимодействующие с функциями оркестратора. Эти функции часто называются клиентскими функциями. Например, вы можете выполнять действия с экземплярами оркестрации следующими методами:

  • Запустите их.
  • Запросить их статус.
  • Устраните их.
  • Отправка событий им, пока они выполняются.
  • Очистить историю экземпляров.

Вы можете привязаться к клиенту оркестрации с помощью атрибута DurableClientAttribute (OrchestrationClientAttribute в устойчивых функциях версии 1.x).

Вы можете привязаться к клиенту оркестрации с помощью аннотации @DurableClientInput.

Триггер постоянного клиента определяется следующим объектом JSON в массиве bindingsfunction.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 — Используется в сценариях, в которых несколько приложений-функций используют одну и ту же учетную запись хранения, но их необходимо изолировать друг от друга. Если значение не указано, используется значение host.json по умолчанию. Это значение должно соответствовать значению, используемому целевыми функциями оркестратора.
  • connectionName — имя параметра приложения, содержащего строку подключения учетной записи хранения. Учетная запись хранения, представленная этой строкой подключения, должна быть такой же, как та, которую используют целевые функции оркестратора. Если это не указано, используется строка подключения учетной записи хранения по умолчанию для приложения-функции.

Примечание.

В большинстве случаев рекомендуется опустить эти свойства и полагаться на поведение по умолчанию.

Способ определения устойчивого триггера клиента зависит от выбранной модели программирования.

Использование декоратора непосредственно в коде durable_client_input функции Python.

Использование клиента

Обычно вы привязываетесь к IDurableClient (DurableOrchestrationClient в Durable Functions версии 1.x), что обеспечивает полный доступ ко всем API оркестрации, поддерживаемым Durable Functions.

Обычно вы привязываетесь к классу DurableClientContext.

Чтобы получить доступ к объекту клиента, необходимо использовать пакет SDK для конкретного языка.

Ниже приведен пример функции, активировающей очередь, которая запускает оркестрацию 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);
}

Примечание.

Предыдущий код C# предназначен для устойчивых функций 2.x. Для Durable Functions 1.x необходимо использовать атрибут OrchestrationClient вместо атрибута DurableClient, а тип параметра DurableOrchestrationClient вместо IDurableOrchestrationClient. Дополнительные сведения о различиях между версиями см. в статье о версиях устойчивых функций .

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

Дополнительные сведения о запуске экземпляров можно найти в управлении экземплярами.

Триггер сущности

Триггеры сущностей позволяют создавать функции сущностей. Этот триггер поддерживает обработку событий для конкретного экземпляра сущности.

Примечание.

Триггеры сущностей доступны начиная с устойчивых функций 2.x.

Внутренне, эта триггерная привязка инспектирует настроенное длительно сохраняющее хранилище для новых операций сущностей, которые необходимо выполнить.

Триггер сущности настраивается с помощью атрибута EntityTriggerAttribute .NET.

Триггер сущности определяется следующим объектом JSON в массиве bindingsfunction.json:

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

По умолчанию имя сущности — это имя функции.

Примечание.

Триггеры сущностей пока не поддерживаются для Java.

Способ определения триггера сущности зависит от выбранной модели программирования.

Использование декоратора entity_trigger непосредственно в коде функции Python.

Поведение триггера

Несколько заметок о триггере объекта:

  • Однопотоковый: один поток диспетчера используется для обработки операций для конкретной сущности. Если несколько сообщений отправляются в одну сущность одновременно, операции будут обрабатываться одновременно.
  • Обработка отравляющих сообщений — в триггерах сущностей нет поддержки отравляющих сообщений.
  • Видимость сообщений — сообщения триггера сущности извлекаются из очереди и становятся невидимыми на задаваемое время. Видимость этих сообщений обновляется автоматически, пока приложение-функция работает исправно.
  • Возвращаемые значения — функции сущности не поддерживают возвращаемые значения. Для сохранения состояния или передачи значений обратно в оркестрации можно использовать определённые API.

Все изменения состояния, внесенные в сущность во время его выполнения, будут автоматически сохраняться после завершения выполнения.

Дополнительные сведения и примеры определения и взаимодействия с триггерами сущностей см. в документации по устойчивым сущностям .

Клиент организации

Привязка клиента сущности позволяет асинхронно активировать функции сущностей. Эти функции иногда называются клиентскими функциями.

Вы можете привязаться к клиенту сущности с помощью атрибута DurableClientAttribute .NET в функциях библиотеки классов .NET.

Примечание.

Можно использовать также [DurableClientAttribute] для привязки к клиенту оркестрации.

Клиент сущности определяется следующим объектом JSON в массиве bindingsfunction.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 — Используется в сценариях, в которых несколько приложений-функций используют одну и ту же учетную запись хранения, но их необходимо изолировать друг от друга. Если значение не указано, используется значение host.json по умолчанию. Это значение должно соответствовать значению, используемому целевыми функциями сущностей.
  • connectionName — имя параметра приложения, содержащего строку подключения учетной записи хранения. Учетная запись хранения, представленная этой строкой подключения, должна быть той же, которая используется функциями целевой сущности. Если это не указано, используется строка подключения учетной записи хранения по умолчанию для приложения-функции.

Примечание.

В большинстве случаев рекомендуется опустить необязательные свойства и полагаться на поведение по умолчанию.

Способ определения клиентской сущности зависит от выбранной модели программирования.

Использование декоратора durable_client_input непосредственно в коде функции Python.

Примечание.

Клиенты сущностей пока не поддерживаются для Java.

Дополнительные сведения и примеры взаимодействия с сущностями в качестве клиента см. в документации по устойчивым сущностям .

Параметры файла host.json

Параметры конфигурации для устойчивых функций.

Примечание.

Все основные версии Устойчивых функций поддерживаются во всех версиях среды выполнения Функций Azure. При этом схема конфигурации host.json немного отличается в зависимости от версии среды выполнения Функций Azure и используемой версии расширения Устойчивых функций. Следующие примеры предназначены для использования с Функциями Azure 2.0 и 3.0. В обоих примерах, если вы используете Функции Azure 1.0, доступные параметры одинаковы, но раздел "durableTask" host.json должен быть помещён в корень конфигурации host.json вместо того, чтобы находиться в качестве поля в разделе "Расширения".

{
 "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,
      "useTablePartitionManagement": false,
      "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,
    "extendedSessionsEnabled": false,
    "extendedSessionIdleTimeoutInSeconds": 30,
    "useAppLease": true,
    "useGracefulShutdown": false,
    "maxEntityOperationBatchSize": 50,
    "storeInputsInOrchestrationHistory": false
  }
 }
}

Имена центров задач должны начинаться с буквы и содержать только буквы и цифры. Если оно не указано, имя концентратора задач по умолчанию для приложения-функции — TestHubName. Для получения дополнительной информации см. раздел Центры задач.

Недвижимость По умолчанию Описание
имя узла TestHubName (DurableFunctionsHub при использовании Durable Functions 1.x) Альтернативные имена центра задач позволяют изолировать несколько приложений устойчивых функций друг от друга, даже если они используют один и тот же интерфейс хранилища.
controlQueueBatchSize 32 Количество сообщений, которые нужно извлечь из очереди управления за раз.
controlQueueBufferThreshold План потребления для Python: 32
План потребления для JavaScript и C#: 128
План "Выделенный" или "Премиум": 256
Количество сообщений в очереди управления, которые можно поместить в память одновременно, после чего диспетчер будет ожидать исключения дополнительных сообщений из очереди.
Количество разделов 4 Количество разделов для очереди управления. Может быть целое число в диапазоне от 1 до 16.
управление тайм-аутом видимости очереди 5 минут Тайм-аут видимости для сообщений, извлеченных из управляющей очереди.
workItemQueueVisibilityTimeout (таймаут видимости очереди рабочих элементов) 5 минут Время видимости сообщений, де-куированных из очереди рабочих заданий.
максимальное количество параллельных функций активности План потребления: 10
План "Выделенный" или "Премиум": 10 × количество процессоров на текущем компьютере
Максимальное число функций активности, которые могут одновременно обрабатываться на одном экземпляре узла.
максимальное количество одновременно работающих оркестровщиков (maxConcurrentOrchestratorFunctions) План потребления: 5
План "Выделенный" или "Премиум": 10 × количество процессоров на текущем компьютере
Максимальное количество функций оркестратора, которые могут быть обработаны одновременно на одной хостовой инстанции.
максимальный интервал опроса очереди 30 секунд Максимальный интервал опроса очереди задач управления и рабочих элементов в формате чч:мм:сс. Высокие значения могут привести к увеличению задержек при обработке сообщений. Низкие значения могут привести к повышению затрат на хранение из-за увеличенного объема транзакций с хранилищем.
connectionName (2.7.0 и более поздние версии)
connectionStringName (2.x)
azureStorageConnectionStringName (1.x)
AzureWebJobsStorage Имя параметра или коллекции параметров приложения, указывающих, как подключиться к базовым ресурсам службы хранилища Azure. Если указан один параметр приложения, это должна быть строка подключения службы хранения Azure.
trackingStoreConnectionName (2.7.0 и более поздние версии)
trackingStoreConnectionStringName
Имя настройки или коллекции настроек приложения, которая определяет, как подключаться к таблицам "История" и "Экземпляры". Если указан один параметр приложения, это должна быть строка подключения службы хранения Azure. Если значение не указано, используется соединение connectionStringName (Надёжное 2.x) или azureStorageConnectionStringName (Надёжное 1.x).
trackingStoreNamePrefix Префикс, который необходимо использовать для таблиц Истории и Экземпляров, когда задано значение trackingStoreConnectionStringName. Если значение не задано, по умолчанию будет использоваться префикс DurableTask. Если значение trackingStoreConnectionStringName не указано, таблицы Истории и экземпляров будут использовать значение hubName как префикс, и любые параметры для trackingStoreNamePrefix будут проигнорированы.
traceInputsAndOutputs (проследитьВходыИВыходы) неправда Это значение указывает, нужно ли отслеживать входы и выходы вызовов функций. По умолчанию при отслеживании событий выполнения функций в вызовах функций указывается количество байтов в сериализованных входных и выходных данных. Такое поведение позволяет получить некоторое представление о входах и выходах, не увеличивая размеры журналов и не раскрывая конфиденциальные сведения. Установка этого свойства в значение true заставляет запись журналов функций логировать полное содержимое входных и выходных данных функций.
отслеживание событий воспроизведения неправда Значение, указывающее, следует ли записывать повторные события оркестрации в Application Insights.
eventGridTopicEndpoint URL-адрес конечной точки пользовательской темы службы Azure Event Grid. Когда этот параметр установлен, события уведомлений о жизненном цикле оркестрации публикуются на этот конечный адрес. Это свойство поддерживает настройку параметров приложения.
ИмяНастройкиКлючаEventGrid Имя параметра приложения, содержащего ключ для аутентификации с пользовательской темой в Azure Event Grid по адресу EventGridTopicEndpoint.
eventGridКоличествоПовторовПубликации 0 Число повторных попыток, если публикация в разделе "Сетка событий" завершается сбоем.
ИнтервалПовторнойПопыткиПубликацииEventGrid 5 минут Интервал повторных попыток, публикуемый Event Grid, указывается в формате чч:мм:сс.
eventGridPublishEventTypes Список типов событий для публикации в Сетке событий. Если не указано, будут опубликованы все типы событий. Допустимые значения: Started, Completed, Failed, Terminated.
useAppLease правда Если установлено значение true, приложениям потребуется получить лизинг на уровне приложения перед обработкой сообщений концентратора задач. Дополнительные сведения см. в документации по аварийному восстановлению и географическом распределению. Доступно, начиная с версии 2.3.0.
использовать устаревшее управление разделами неправда Если задано значение false, используется алгоритм управления секциями, который снижает вероятность дублирования выполнения функций при горизонтальном масштабировании. Доступно, начиная с версии 2.3.0.
использоватьУправлениеРазделамиТаблиц неправда Если задано значение true, используется алгоритм управления секциями, предназначенный для снижения затрат на Azure Storage для учетных записей версии V2. Доступно начиная с webJobs.Extensions.DurableTask версии 2.10.0. Если включено в WebJobs.Extensions.DurableTask версии 2.x или в версиях Worker.Extensions.DurableTask ранее 1.2.x, управляемое удостоверение не поддерживается.
useGracefulShutdown неправда (Предварительная версия) Включение плавного завершения работы для снижения вероятности того, что при завершении работы хоста произойдет сбой выполнения функций в процессе.
maxEntityOperationBatchSize(2.6.1) План потребления: 50
План "Выделенный" или "Премиум": 5000
Максимальное количество операций с сущностями, которые обрабатываются пакетом. Если задано значение 1, пакетная обработка отключена, а каждое сообщение об операции обрабатывается с помощью отдельного вызова функции.
сохранитьВходныеДанныеВОркестрационнойИстории неправда Если установлено значение true, фреймворк Durable Task требует сохранять входные данные действий в таблице истории. Это позволяет отображать входные данные функции активности при выполнении запроса к истории оркестрации.
maxGrpcMessageSizeInBytes (максимальный размер сообщения gRPC в байтах) 4194304 Целочисленное значение, задающее максимальный размер в байтах сообщений, которые может получать клиент gRPC для DurableTaskClient. Это относится к .NET Isolated и Java в Durable Functions.

Многие из этих параметров предназначены для оптимизации производительности. Дополнительные сведения см. в статье о производительности и масштабируемости.

Дальнейшие действия