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

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

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

Внимание

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

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

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

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

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

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

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

Для 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, который дополнительно экспортирует декораторы Устойчивые функции.

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

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

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

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

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

Функции оркестратора никогда не должны использовать никаких входных и выходных привязок, отличных от привязки триггера оркестрации. Это может вызвать проблемы с расширением устойчивых функций, так как эти привязки могут не подчиняться правилам однопоточности и ввода-вывода. Если вы хотите использовать другие привязки, добавьте их в функцию действия, вызываемую из функции оркестратора. Дополнительные сведения об ограничениях кодирования для функций оркестратора см. в документации по ограничениям кода функций службы 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. Для расширения Устойчивые функции 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. Для расширения Устойчивые функции 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 для получения идентификатора экземпляра вызывающей оркестровки.

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

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

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

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

Примечание.

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

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

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

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

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

Обычно привязка к классу 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. Для расширения "Устойчивые функции" версии 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);
}

Дополнительные сведения о запуске экземпляров см. в статье Управление экземплярами в устойчивых функциях (Функции Azure).

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

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

Примечание.

Триггеры сущности доступны начиная с расширения "Устойчивые функции" версии 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.

{
 "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. Для получения дополнительной информации см. раздел Центры задач.

Свойство По умолчанию Description
hubName TestHubName (DurableFunctionsHub при использовании Устойчивые функции 1.x) Альтернативные имена центра задач позволяют изолировать несколько приложений устойчивых функций друг от друга, даже если они используют один и тот же интерфейс хранилища.
controlQueueBatchSize 32 Количество сообщений, одновременно извлекаемых из очереди управления.
controlQueueBufferThreshold План потребления для Python: 32
План потребления для JavaScript и C#: 128
План "Выделенный" или "Премиум": 256
Количество сообщений в очереди управления, которые можно поместить в память одновременно, после чего диспетчер будет ожидать исключения дополнительных сообщений из очереди.
partitionCount 4 Число разделов для очереди управления. Допускается целочисленное значение в диапазоне от 1 до 16.
controlQueueVisibilityTimeout 5 мин Время видимости для сообщений, выведенных из очереди управления.
workItemQueueVisibilityTimeout 5 мин Время видимости для сообщений, выведенных из очереди рабочих элементов.
maxConcurrentActivityFunctions План потребления: 10
План "Выделенный" или "Премиум": 10 × количество процессоров на текущем компьютере
Максимальное число функции действия, которые могут параллельно обрабатываться на одном экземпляре узла.
maxConcurrentOrchestratorFunctions План потребления: 5
План "Выделенный" или "Премиум": 10 × количество процессоров на текущем компьютере
Максимальное количество функций оркестратора, которые могут быть обработаны параллельно в одном экземпляре узла.
maxQueuePollingInterval 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 false Это значение указывает, нужно ли отслеживать входы и выходы вызовов функций. При трассировке событий выполнения функции по умолчанию для вызовов функций фиксируется количество байтов в сериализованных входных и выходных данных. Такое поведение позволяет получить некоторое представление о входах и выходах, не увеличивая размеры журналов и не раскрывая конфиденциальные сведения. Если вы присвоите этому свойству значение true, в журналы выполнения функций будет включаться полное содержимое их входов и выходов.
traceReplayEvents false Значение, указывающее, следует ли записывать повторные события оркестрации в Application Insights.
eventGridTopicEndpoint URL-адрес конечной точки пользовательского раздела службы "Сетка событий Azure". Если установлен этот параметр, события уведомления о жизненном цикле оркестрации публикуются в указанную конечную точку. Это свойство поддерживает разрешение параметров приложения.
eventGridKeySettingName Имя параметра приложения, содержащего ключ для аутентификации в пользовательском разделе службы "Сетка событий Azure" в EventGridTopicEndpoint.
eventGridPublishRetryCount 0 Число повторных попыток, если публикация в разделе "Сетка событий" завершается сбоем.
eventGridPublishRetryInterval 5 мин Интервал повторных попыток для публикации в разделе "Сетка событий" указывается в формате чч: мм:сс.
eventGridPublishEventTypes Список типов событий для публикации в Сетке событий. Если значение не указано, будут опубликованы все типы событий. Допустимые значения: Started, Completed, Failed, Terminated.
useAppLease true Если задано значение true, перед обработкой сообщений центра задач приложениям потребуется получить аренду большого двоичного объекта уровня приложения. Дополнительные сведения см. в документации по аварийному восстановлению и географическом распределению. Доступно, начиная с версии 2.3.0.
useLegacyPartitionManagement false Если задано значение false, используется алгоритм управления секциями, который снижает вероятность дублирования выполнения функций при горизонтальном масштабировании. Доступно, начиная с версии 2.3.0.
useTablePartitionManagement false Если задано значение true, используется алгоритм управления секциями, предназначенный для снижения затрат на служба хранилища Azure учетных записей версии 2. Доступно начиная с версии 2.10.0. Эта функция сейчас доступна в предварительной версии и еще не совместима с планом потребления.
useGracefulShutdown false Предварительная версия. Включение корректного завершения работы для снижения вероятности того, что при завершении работы основного приложения произойдет сбой внутрипроцессного выполнения функции.
maxEntityOperationBatchSize(2.6.1) План потребления: 50
План "Выделенный" или "Премиум": 5000
Максимальное количество операций с сущностями, которые обрабатываются пакетом. Если задано значение 1, пакетная обработка отключена, а каждое сообщение об операции обрабатывается с помощью отдельного вызова функции.
storeInputsInOrchestrationHistory false Если задано значение true, платформа устойчивых задач позволяет сохранять входные данные действий в таблице журнала. Это позволяет отображать входные данные функции действия при запросе журнала оркестрации.

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

Следующие шаги