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

Расширение устойчивых функций содержит две новые привязки триггера, которые управляют выполнением функций действий и оркестратора.The Durable Functions extension introduces two new trigger bindings that control the execution of orchestrator and activity functions. Он также содержит привязку к выходным данным, которая действует как клиент для среды выполнения устойчивых функций.It also introduces an output binding that acts as a client for the Durable Functions runtime.

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

Триггер оркестрации позволяет создавать устойчивые функции Orchestrator.The orchestration trigger enables you to author durable orchestrator functions. Этот триггер поддерживает запуск новых экземпляров функции оркестратора и возобновление существующих экземпляров функции оркестратора, которые "ожидают" задачу.This trigger supports starting new orchestrator function instances and resuming existing orchestrator function instances that are "awaiting" a task.

При использовании средств Visual Studio для Функций Azure триггер оркестрации настраивается с помощью атрибута .NET OrchestrationTriggerAttribute.When you use the Visual Studio tools for Azure Functions, the orchestration trigger is configured using the OrchestrationTriggerAttribute .NET attribute.

При написании функции оркестратора на языках сценариев (например,на JavaScript или C#) триггер оркестрации определяется следующим объектом JSON в массиве bindings файла function.json:When you write orchestrator functions in scripting languages (for example, JavaScript or C# scripting), the orchestration trigger is defined by the following JSON object in the bindings array of the function.json file:

{
    "name": "<Name of input parameter in function signature>",
    "orchestration": "<Optional - name of the orchestration>",
    "type": "orchestrationTrigger",
    "direction": "in"
}
  • orchestration — это имя оркестрации, которое клиенты должны использовать, когда им нужно запустить новые экземпляры этой функции Orchestrator.orchestration is the name of the orchestration that clients must use when they want to start new instances of this orchestrator function. Это необязательное свойство.This property is optional. Если не указан, используется имя функции.If not specified, the name of the function is used.

Внутри эта привязка триггера опрашивает серии очередей в учетной записи хранения по умолчанию приложения-функции.Internally this trigger binding polls a series of queues in the default storage account for the function app. Эти очереди представляют собой сведения о внутренней реализации расширения, поэтому они не настраиваются явно в свойствах привязки.These queues are internal implementation details of the extension, which is why they are not explicitly configured in the binding properties.

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

Ниже приведены сведения о триггере оркестрации:Here are some notes about the orchestration trigger:

  • Однопоточная обработка. Один поток диспетчера используется для выполнения всех функций оркестратора на одном экземпляре узла.Single-threading - A single dispatcher thread is used for all orchestrator function execution on a single host instance. По этой причине убедитесь, что код функции оркестратора эффективен и не выполняет никаких операций ввода-вывода.For this reason, it is important to ensure that orchestrator function code is efficient and doesn't perform any I/O. Также важно убедиться, что этот поток не выполняет никакой асинхронной работы, кроме тех случаев, когда ожидаются типы задач, специфичные для устойчивых функций.It is also important to ensure that this thread does not do any async work except when awaiting on Durable Functions-specific task types.
  • Обработка сообщений о сбое. В триггерах оркестрации не поддерживаются сообщения о сбое.Poison-message handling - There is no poison message support in orchestration triggers.
  • Видимость сообщений. Сообщения триггеров оркестрации удаляются из очереди и сохраняются невидимыми в течение настраиваемого промежутка времени.Message visibility - Orchestration trigger messages are dequeued and kept invisible for a configurable duration. Видимость этих сообщений обновляется автоматически, пока приложение-функция выполняется и работоспособно.The visibility of these messages is renewed automatically as long as the function app is running and healthy.
  • Возвращаемые значения. Возвращаемые значения сериализуются в JSON и сохраняются в таблице с журналом оркестрации в хранилище таблиц Azure.Return values - Return values are serialized to JSON and persisted to the orchestration history table in Azure Table storage. Эти возвращаемые значения может запрашивать привязка клиента оркестрации, описанная ниже.These return values can be queried by the orchestration client binding, described later.

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

Функции оркестратора никогда не должны использовать никаких входных и выходных привязок, отличных от привязки триггера оркестрации.Orchestrator functions should never use any input or output bindings other than the orchestration trigger binding. Это может вызвать проблемы с расширением устойчивых функций, так как эти привязки могут не подчиняться правилам однопоточности и ввода-вывода.Doing so has the potential to cause problems with the Durable Task extension because those bindings may not obey the single-threading and I/O rules. Если вы хотите использовать другие привязки, добавьте их в функцию действия, вызываемую из функции Orchestrator.If you'd like to use other bindings, add them to an Activity function called from your Orchestrator function.

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

Функции оркестратора JavaScript никогда не должны быть объявлены как async.JavaScript orchestrator functions should never be declared async.

Использование триггера (.NET)Trigger usage (.NET)

Привязка триггера оркестрации поддерживает входные и выходные данные.The orchestration trigger binding supports both inputs and outputs. Ниже приведены некоторые сведения об обработке входных и выходных данных.Here are some things to know about input and output handling:

  • входные данные . функции оркестрации .NET поддерживают только DurableOrchestrationContext в качестве типа параметра.inputs - .NET orchestration functions support only DurableOrchestrationContext as a parameter type. Входные данные десериализации непосредственно в сигнатуре функции не поддерживаются.Deserialization of inputs directly in the function signature is not supported. Код должен использовать метод GetInput<T> (.NET) или getInput (JavaScript) для выборки входных данных функции Orchestrator.Code must use the GetInput<T> (.NET) or getInput (JavaScript) method to fetch orchestrator function inputs. Эти входные данные должны быть типа, который сериализуется в JSON.These inputs must be JSON-serializable types.
  • Выходные данные. Триггеры оркестрации поддерживают выходные значения, а также входные данные.outputs - Orchestration triggers support output values as well as inputs. Возвращаемое значение функции используется для назначения выходного значения и должно быть типа, который сериализуется в JSON.The return value of the function is used to assign the output value and must be JSON-serializable. Если функция .NET возвращает Task или void, значение null будет сохранено как выходное.If a .NET function returns Task or void, a null value will be saved as the output.

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

В следующем примере кода показано, как может выглядеть самая простая функция Orchestrator "Hello World":The following example code shows what the simplest "Hello World" orchestrator function might look like:

C#C#

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

Примечание

Предыдущий код предназначен для Устойчивые функции 2. x.The previous code is for Durable Functions 2.x. Для Устойчивые функции 1. x необходимо использовать DurableOrchestrationContext вместо IDurableOrchestrationContext.For Durable Functions 1.x, you must use DurableOrchestrationContext instead of IDurableOrchestrationContext. Дополнительные сведения о различиях между версиями см. в статье устойчивые функции версии .For more information about the differences between versions, see the Durable Functions Versions article.

JavaScript (только Функции 2.0)JavaScript (Functions 2.0 only)

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

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

Примечание

Объект context в JavaScript не представляет DurableOrchestrationContext, а контекст функции в целом.The context object in JavaScript does not represent the DurableOrchestrationContext, but the function context as a whole. Получить доступ к методам оркестрации можно через свойство df объекта context.You can access orchestration methods via the context object's df property.

Примечание

Для оркестраторов JavaScript нужно использовать return.JavaScript orchestrators should use return. Библиотека durable-functions отвечает за вызов метода context.done.The durable-functions library takes care of calling the context.done method.

Большинство функций оркестратора вызывают функции действий. Пример "Hello World" демонстрирует, как вызвать функцию действия:Most orchestrator functions call activity functions, so here is a "Hello World" example that demonstrates how to call an activity function:

C#C#

[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.The previous code is for Durable Functions 2.x. Для Устойчивые функции 1. x необходимо использовать DurableOrchestrationContext вместо IDurableOrchestrationContext.For Durable Functions 1.x, you must use DurableOrchestrationContext instead of IDurableOrchestrationContext. Дополнительные сведения о различиях между версиями см. в статье устойчивые функции версии .For more information about the differences between versions, see the Durable Functions versions article.

JavaScript (только Функции 2.0)JavaScript (Functions 2.0 only)

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

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

Триггер действия позволяет создавать функции, которые вызываются функциями Orchestrator, называемыми функциями действий.The activity trigger enables you to author functions that are called by orchestrator functions, known as activity functions.

Если вы используете Visual Studio, триггер действия настраивается с помощью атрибута ActivityTriggerAttribute .NET.If you're using Visual Studio, the activity trigger is configured using the ActivityTriggerAttribute .NET attribute.

Если вы используете VS Code или портал Azure для разработки приложений, триггер действия определяется следующим объектом JSON в массиве bindings файла function.json:If you're using VS Code or the Azure portal for development, the activity trigger is defined by the following JSON object in the bindings array of function.json:

{
    "name": "<Name of input parameter in function signature>",
    "activity": "<Optional - name of the activity>",
    "type": "activityTrigger",
    "direction": "in"
}
  • activity является именем действия.activity is the name of the activity. Это значение представляет собой имя, которое функции Orchestrator используют для вызова этой функции действия.This value is the name that orchestrator functions use to invoke this activity function. Это необязательное свойство.This property is optional. Если не указан, используется имя функции.If not specified, the name of the function is used.

Внутри эта привязка триггера опрашивает очередь в учетной записи хранения по умолчанию приложения-функции.Internally this trigger binding polls a queue in the default storage account for the function app. Эта очередь представляет собой сведения о внутренней реализации расширения, поэтому она не настраивается явно в свойствах привязки.This queue is an internal implementation detail of the extension, which is why it is not explicitly configured in the binding properties.

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

Ниже приведены сведения о триггере действия:Here are some notes about the activity trigger:

  • Работа с потоками. В отличие от триггера оркестрации, триггеры действий не имеют каких-либо ограничений при работе с потоками или операциями ввода-вывода.Threading - Unlike the orchestration trigger, activity triggers don't have any restrictions around threading or I/O. Они могут рассматриваться как обычные функции.They can be treated like regular functions.
  • Обработка сообщений о сбое. В триггерах действий не поддерживаются сообщения о сбое.Poison-message handling - There is no poison message support in activity triggers.
  • Видимость сообщений. Сообщения триггеров действий удаляются из очереди и сохраняются невидимыми в течение настраиваемого промежутка времени.Message visibility - Activity trigger messages are dequeued and kept invisible for a configurable duration. Видимость этих сообщений обновляется автоматически, пока приложение-функция выполняется и работоспособно.The visibility of these messages is renewed automatically as long as the function app is running and healthy.
  • Возвращаемые значения. Возвращаемые значения сериализуются в JSON и сохраняются в таблице с журналом оркестрации в хранилище таблиц Azure.Return values - Return values are serialized to JSON and persisted to the orchestration history table in Azure Table storage.

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

Внутренняя часть хранилища функций действий является частью реализации, и код пользователя не должен взаимодействовать с этими сущностями хранилища напрямую.The storage backend for activity functions is an implementation detail and user code should not interact with these storage entities directly.

Использование триггера (.NET)Trigger usage (.NET)

Привязка триггера действий поддерживает входные и выходные данные, как и триггер оркестрации.The activity trigger binding supports both inputs and outputs, just like the orchestration trigger. Ниже приведены некоторые сведения об обработке входных и выходных данных.Here are some things to know about input and output handling:

  • входные данные . функции действий .NET изначально используют DurableActivityContext в качестве типа параметра.inputs - .NET activity functions natively use DurableActivityContext as a parameter type. Кроме того, функция действия может быть объявлена с любым типом параметра, который сериализуется в JSON.Alternatively, an activity function can be declared with any parameter type that is JSON-serializable. При использовании DurableActivityContextможно вызвать GetInput<T>, чтобы получить и десериализовать входные данные функции действия.When you use DurableActivityContext, you can call GetInput<T> to fetch and deserialize the activity function input.
  • Выходные данные. Функции действий поддерживают выходные значения, а также входные данные.outputs - Activity functions support output values as well as inputs. Возвращаемое значение функции используется для назначения выходного значения и должно быть типа, который сериализуется в JSON.The return value of the function is used to assign the output value and must be JSON-serializable. Если функция .NET возвращает Task или void, значение null будет сохранено как выходное.If a .NET function returns Task or void, a null value will be saved as the output.
  • Метаданные. Функции действий .NET можно привязать к параметру string instanceId, чтобы получить идентификатор экземпляра родительской оркестрации.metadata - .NET activity functions can bind to a string instanceId parameter to get the instance ID of the parent orchestration.

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

В следующем примере кода показано, как может выглядеть простая функция действия "Hello World":The following example code shows what a simple "Hello World" activity function might look like:

C#C#

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

Примечание

Предыдущий код предназначен для Устойчивые функции 2. x.The previous code is for Durable Functions 2.x. Для Устойчивые функции 1. x необходимо использовать DurableActivityContext вместо IDurableActivityContext.For Durable Functions 1.x, you must use DurableActivityContext instead of IDurableActivityContext. Дополнительные сведения о различиях между версиями см. в статье устойчивые функции версии .For more information about the differences between versions, see the Durable Functions Versions article.

Типом параметра по умолчанию для привязки ActivityTriggerAttribute .NET является IDurableActivityContext.The default parameter type for the .NET ActivityTriggerAttribute binding is IDurableActivityContext. Но триггеры действий .NET также поддерживают привязку непосредственно к JSON-сериализуемым типам (включая примитивные типы), поэтому эту же функцию можно упростить следующим образом:However, .NET activity triggers also support binding directly to JSON-serializeable types (including primitive types), so the same function could be simplified as follows:

[FunctionName("SayHello")]
public static string SayHello([ActivityTrigger] string name)
{
    return $"Hello {name}!";
}

JavaScript (только Функции 2.0)JavaScript (Functions 2.0 only)

module.exports = async function(context) {
    return `Hello ${context.bindings.name}!`;
};

Привязки JavaScript также можно передать в качестве дополнительных параметров, поэтому одну и ту же функцию можно упростить следующим образом:JavaScript bindings can also be passed in as additional parameters, so the same function could be simplified as follows:

module.exports = async function(context, name) {
    return `Hello ${name}!`;
};

Использование входных и выходных привязокUsing input and output bindings

В дополнение к привязке триггера действия можно использовать обычные входные и выходные привязки.You can use regular input and output bindings in addition to the activity trigger binding. Например, можно принять входные данные для привязки действия и отправить сообщение EventHub с помощью выходной привязки EventHub:For example, you can take the input to your activity binding, and send a message to an EventHub using the EventHub output binding:

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

Клиент оркестрацииOrchestration client

Привязка клиента оркестрации позволяет создавать функции, взаимодействующие с функциями Orchestrator.The orchestration client binding enables you to write functions that interact with orchestrator functions. Эти функции иногда называют клиентскими функциями.These functions are sometimes referred to as client functions. Например, с экземплярами оркестрации можно взаимодействовать следующим образом:For example, you can act on orchestration instances in the following ways:

  • Запустите их.Start them.
  • Запросите их состояние.Query their status.
  • Завершите их.Terminate them.
  • Отправляйте им события во время их работы.Send events to them while they're running.
  • Очистите журнал экземпляра.Purge instance history.

Если вы используете Visual Studio, можно выполнить привязку к клиенту оркестрации с помощью атрибута OrchestrationClientAttribute .NET для Устойчивые функции 1,0.If you're using Visual Studio, you can bind to the orchestration client by using the OrchestrationClientAttribute .NET attribute for Durable Functions 1.0. Начиная с Устойчивые функции 2,0 можно выполнить привязку к клиенту оркестрации с помощью атрибута DurableClientAttribute .NET.Starting in the Durable Functions 2.0, you can bind to the orchestration client by using the DurableClientAttribute .NET attribute.

Если вы используете языки сценариев (например, файлы CSX или JS ) для разработки, триггер ОРКЕСТРАЦИИ определяется следующим объектом JSON в bindings массиве файла Function. JSON:If you're using scripting languages (for example, .csx or .js files) for development, the orchestration trigger is defined by the following JSON object in the bindings array of 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 используется в ситуациях, когда несколько приложений-функций совместно используют одну и ту же учетную запись хранения, но должны быть изолированы друг от друга.taskHub - Used in scenarios where multiple function apps share the same storage account but need to be isolated from each other. Если значение не задано, по умолчанию используется значение из host.json.If not specified, the default value from host.json is used. Оно должно соответствовать значению, которое используется целевыми функциями оркестратора.This value must match the value used by the target orchestrator functions.
  • connectionName — имя параметра приложения, содержащего строку подключения к учетной записи хранения.connectionName - The name of an app setting that contains a storage account connection string. Учетная запись хранения, представленная этой строкой подключения, должна быть той же, которая используется целевыми функциями оркестратора.The storage account represented by this connection string must be the same one used by the target orchestrator functions. Если она не указана, для приложения-функции используется строка подключения к учетной записи хранения по умолчанию.If not specified, the default storage account connection string for the function app is used.

Примечание

В большинстве случаев рекомендуется исключить эти свойства и полагаться на поведение по умолчанию.In most cases, we recommend that you omit these properties and rely on the default behavior.

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

В функциях .NET обычно выполняется привязка к IDurableOrchestrationClient, которая предоставляет полный доступ ко всем API клиентов оркестрации, поддерживаемым Устойчивые функции.In .NET functions, you typically bind to IDurableOrchestrationClient, which gives you full access to all orchestration client APIs supported by Durable Functions. В более старых выпусках Устойчивые функции 2. x вместо этого привязывается к классу DurableOrchestrationClient.In the older Durable Functions 2.x releases, you instead bind to the DurableOrchestrationClient class. В JavaScript одни и те же API-интерфейсы предоставляются объектом, возвращаемым из getClient.In JavaScript, the same APIs are exposed by the object returned from getClient. API-интерфейсы в клиентском объекте включают в себя:APIs on the client object include:

  • StartNewAsync
  • GetStatusAsync
  • TerminateAsync
  • RaiseEventAsync
  • PurgeInstanceHistoryAsync
  • CreateCheckStatusResponse
  • CreateHttpManagementPayload

Кроме того, функции .NET могут быть привязаны к IAsyncCollector<T>, где T StartOrchestrationArgs или JObject.Alternatively, .NET functions can bind to IAsyncCollector<T> where T is StartOrchestrationArgs or JObject.

Дополнительные сведения об этих операциях см. в документации по API IDurableOrchestrationClient.For more information on these operations, see the IDurableOrchestrationClient API documentation.

Пример клиента (разработка в Visual Studio)Client sample (Visual Studio development)

Ниже приведен пример функции, активируемой с помощью очереди, которая запускает оркестрацию HelloWorld.Here is an example queue-triggered function that starts a "HelloWorld" orchestration.

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

Примечание

Предыдущий C# код предназначен для устойчивые функции 2. x.The previous C# code is for Durable Functions 2.x. Для Устойчивые функции 1. x необходимо использовать атрибут OrchestrationClient вместо атрибута DurableClient, а вместо IDurableOrchestrationClientнеобходимо использовать тип параметра DurableOrchestrationClient.For Durable Functions 1.x, you must use OrchestrationClient attribute instead of the DurableClient attribute, and you must use the DurableOrchestrationClient parameter type instead of IDurableOrchestrationClient. Дополнительные сведения о различиях между версиями см. в статье устойчивые функции версии .For more information about the differences between versions, see the Durable Functions Versions article.

Пример клиента (не Visual Studio)Client sample (not Visual Studio)

Если для разработки вы не используете Visual Studio, можно создать указанный ниже файл function.json.If you're not using Visual Studio for development, you can create the following function.json file. В этом примере показано, как настроить функцию, активируемую с помощью очереди, которая использует привязку клиента устойчивой оркестрации:This example shows how to configure a queue-triggered function that uses the durable orchestration client binding:

{
  "bindings": [
    {
      "name": "input",
      "type": "queueTrigger",
      "queueName": "durable-function-trigger",
      "direction": "in"
    },
    {
      "name": "starter",
      "type": "durableClient",
      "direction": "in"
    }
  ]
}

Примечание

Предыдущий формат JSON предназначен для Устойчивые функции 2. x.The previous JSON is for Durable Functions 2.x. Для Устойчивые функции 1. x необходимо использовать orchestrationClient вместо durableClient в качестве типа триггера.For Durable Functions 1.x, you must use orchestrationClient instead of the durableClient as the trigger type. Дополнительные сведения о различиях между версиями см. в статье устойчивые функции версии .For more information about the differences between versions, see the Durable Functions Versions article.

Ниже приведены примеры конкретно для языка, которые запускают новые экземпляры функции оркестратора.Following are language-specific samples that start new orchestrator function instances.

C#Пример скриптаC# Script Sample

В следующем примере показано, как использовать привязку клиента долговременного оркестрации для запуска нового экземпляра функции из C# функции, активируемой с помощью очереди:The following sample shows how to use the durable orchestration client binding to start a new function instance from a queue-triggered C# function:

#r "Microsoft.Azure.WebJobs.Extensions.DurableTask"

using Microsoft.Azure.WebJobs.Extensions.DurableTask;

public static Task Run(string input, IDurableOrchestrationClient starter)
{
    return starter.StartNewAsync("HelloWorld", input);
}

Примечание

Предыдущий код предназначен для Устойчивые функции 2. x.The previous code is for Durable Functions 2.x. Для Устойчивые функции 1. x необходимо использовать тип параметра DurableOrchestrationClient, а не IDurableOrchestrationClient.For Durable Functions 1.x, you must use the DurableOrchestrationClient parameter type instead of IDurableOrchestrationClient. Дополнительные сведения о различиях между версиями см. в статье устойчивые функции версии .For more information about the differences between versions, see the Durable Functions Versions article.

Пример на языке JavaScriptJavaScript Sample

В следующем примере показано, как использовать привязку клиента устойчивой оркестрации для запуска нового экземпляра функции из функции JavaScript:The following sample shows how to use the durable orchestration client binding to start a new function instance from a JavaScript function:

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

Дополнительные сведения о запуске экземпляров см. в статье Управление экземплярами в устойчивых функциях (Функции Azure).More details on starting instances can be found in Instance management.

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

Триггеры сущностей позволяют создавать функции сущностей.Entity triggers allow you to author entity functions. Этот триггер поддерживает обработку событий для конкретного экземпляра сущности.This trigger supports processing events for a specific entity instance.

При использовании средств Visual Studio для функций Azure триггер сущности настраивается с помощью атрибута EntityTriggerAttribute .NET.When you use the Visual Studio tools for Azure Functions, the entity trigger is configured using the EntityTriggerAttribute .NET attribute.

Примечание

Триггеры сущностей доступны начиная с Устойчивые функции 2. x.Entity triggers are available starting in Durable Functions 2.x.

Внутри эта привязка триггера опрашивает серии очередей в учетной записи хранения по умолчанию приложения-функции.Internally this trigger binding polls a series of queues in the default storage account for the function app. Эти очереди представляют собой сведения о внутренней реализации расширения, поэтому они не настраиваются явно в свойствах привязки.These queues are internal implementation details of the extension, which is why they are not explicitly configured in the binding properties.

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

Ниже приведены некоторые замечания о триггере сущности.Here are some notes about the entity trigger:

  • С одним потоком: один поток Dispatcher используется для обработки операций с определенной сущностью.Single-threaded: A single dispatcher thread is used to process operations for a particular entity. Если несколько сообщений отправляются в одну сущность одновременно, операции будут обрабатываться один за раз.If multiple messages are sent to a single entity concurrently, the operations will be processed one-at-a-time.
  • Обработка подозрительных сообщений — в триггерах сущностей нет поддержки подозрительных сообщений.Poison-message handling - There is no poison message support in entity triggers.
  • Видимость сообщений — сообщения триггера сущности удаляются из очереди и остаются невидимыми в течение настраиваемого периода времени.Message visibility - Entity trigger messages are dequeued and kept invisible for a configurable duration. Видимость этих сообщений обновляется автоматически, пока приложение-функция выполняется и работоспособно.The visibility of these messages is renewed automatically as long as the function app is running and healthy.
  • Возвращаемые значения — функции сущностей не поддерживают возвращаемые значения.Return values - Entity functions do not support return values. Существуют определенные API, которые можно использовать для сохранения состояния или передачи значений обратно в оркестрации.There are specific APIs that can be used to save state or pass values back to orchestrations.

Любые изменения состояния, внесенные в сущность во время ее выполнения, будут автоматически сохраняться после завершения выполнения.Any state changes made to an entity during its execution will be automatically persisted after execution has completed.

Использование триггера (.NET)Trigger usage (.NET)

Каждая функция-сущность имеет тип параметра IDurableEntityContext, который имеет следующие члены:Every entity function has a parameter type of IDurableEntityContext, which has the following members:

  • Имя_объекта: имя выполняемой в данный момент сущности.EntityName: the name of the currently executing entity.
  • EntityKey— ключ выполняемой в данный момент сущности.EntityKey: the key of the currently executing entity.
  • EntityId: идентификатор выполняющейся в данный момент сущности.EntityId: the ID of the currently executing entity.
  • Имя_операции: имя текущей операции.OperationName: the name of the current operation.
  • Хасстате: существует ли сущность, то есть имеет какое-то состояние.HasState: whether the entity exists, that is, has some state.
  • State<TState > () : Возвращает текущее состояние сущности.GetState<TState>(): gets the current state of the entity. Если он еще не существует, он создается и инициализируется в default<TState>.If it does not already exist, it is created and initialized to default<TState>. Параметр TState должен быть типом-примитивом или сериализуемым в формат JSON.The TState parameter must be a primitive or JSON-serializeable type.
  • State<TState > (инитфунктион) : Возвращает текущее состояние сущности.GetState<TState>(initfunction): gets the current state of the entity. Если он еще не существует, он создается путем вызова указанного параметра initfunction.If it does not already exist, it is created by calling the provided initfunction parameter. Параметр TState должен быть типом-примитивом или сериализуемым в формат JSON.The TState parameter must be a primitive or JSON-serializeable type.
  • Setstate (ARG) : создает или обновляет состояние сущности.SetState(arg): creates or updates the state of the entity. Параметр arg должен быть сериализуемым объектом или примитивом JSON.The arg parameter must be a JSON-serializeable object or primitive.
  • Делетестате () : удаляет состояние сущности.DeleteState(): deletes the state of the entity.
  • Ввод <тинпут > () : получает входные данные для текущей операции.GetInput<TInput>(): gets the input for the current operation. Параметр типа TInput должен быть примитивным или сериализуемым типом JSON.The TInput type parameter must be a primitive or JSON-serializeable type.
  • Return (ARG) : Возвращает значение для оркестрации, вызвавшего операцию.Return(arg): returns a value to the orchestration that called the operation. Параметр arg должен быть объектом-примитивом или сериализуемым в формат JSON.The arg parameter must be a primitive or JSON-serializeable object.
  • Сигналентити (EntityId, счедуледтимеутк, Operation, input) : отправляет одностороннее сообщение в сущность.SignalEntity(EntityId, scheduledTimeUtc, operation, input): sends a one-way message to an entity. Параметр operation должен быть строкой, не имеющей значения NULL, необязательным scheduledTimeUtc должен быть DateTime в формате UTC, в который вызывается операция, а параметр input должен быть объектом-примитивом или сериализуемым в JSON.The operation parameter must be a non-null string, the optional scheduledTimeUtc must be a UTC datetime at which to invoke the operation, and the input parameter must be a primitive or JSON-serializeable object.
  • Креатеневорчестратион (орчестраторфунктионнаме, input) : запускает новое согласование.CreateNewOrchestration(orchestratorFunctionName, input): starts a new orchestration. Параметр input должен быть объектом-примитивом или сериализуемым в формат JSON.The input parameter must be a primitive or JSON-serializeable object.

Доступ к IDurableEntityContext объекту, переданному в функцию сущности, можно получить с помощью свойства Entity.Current Async-Local.The IDurableEntityContext object passed to the entity function can be accessed using the Entity.Current async-local property. Этот подход удобен при использовании модели программирования на основе классов.This approach is convenient when using the class-based programming model.

Пример триггераC# (синтаксис на основе функций)Trigger sample (C# function-based syntax)

Приведенный ниже код является примером простой сущности Counter, реализованной в формате устойчивой функции.The following code is an example of a simple Counter entity implemented as a durable function. Эта функция определяет три операции: add, reset и get, каждая из которых изменяет целочисленное значение состояния.This function defines three operations, add, reset, and get, each of which operate on an integer state.

[FunctionName("Counter")]
public static void Counter([EntityTrigger] IDurableEntityContext ctx)
{
    switch (ctx.OperationName.ToLowerInvariant())
    {
        case "add":
            ctx.SetState(ctx.GetState<int>() + ctx.GetInput<int>());
            break;
        case "reset":
            ctx.SetState(0);
            break;
        case "get":
            ctx.Return(ctx.GetState<int>()));
            break;
    }
}

Дополнительные сведения о синтаксисе на основе функций и его использовании см. в этой статье.For more information on the function-based syntax and how to use it, see Function-Based Syntax.

Пример триггераC# (синтаксис на основе класса)Trigger sample (C# class-based syntax)

Следующий пример представляет собой эквивалентную реализацию сущности Counter с помощью классов и методов.The following example is an equivalent implementation of the Counter entity using classes and methods.

[JsonObject(MemberSerialization.OptIn)]
public class Counter
{
    [JsonProperty("value")]
    public int CurrentValue { get; set; }

    public void Add(int amount) => this.CurrentValue += amount;

    public void Reset() => this.CurrentValue = 0;

    public int Get() => this.CurrentValue;

    [FunctionName(nameof(Counter))]
    public static Task Run([EntityTrigger] IDurableEntityContext ctx)
        => ctx.DispatchAsync<Counter>();
}

Состояние этой сущности представлено объектом типа Counter, который содержит поле с текущим значением счетчика.The state of this entity is an object of type Counter, which contains a field that stores the current value of the counter. Чтобы сохранить этот объект в хранилище, он сериализуется и десериализуется библиотекой Json.NET.To persist this object in storage, it is serialized and deserialized by the Json.NET library.

Дополнительные сведения о синтаксисе на основе классов и его использовании см. в этой статье.For more information on the class-based syntax and how to use it, see Defining entity classes.

Примечание

Метод точки входа функции [FunctionName] с атрибутом должен быть объявлен static при использовании классов сущностей.The function entry point method with the [FunctionName] attribute must be declared static when using entity classes. Нестатические методы точек входа могут привести к инициализации нескольких объектов и возможно других неопределенных поведений.Non-static entry point methods may result in multiple object initialization and potentially other undefined behaviors.

Классы сущностей имеют специальные механизмы для взаимодействия с привязками и внедрением зависимостей .NET.Entity classes have special mechanisms for interacting with bindings and .NET dependency injection. Дополнительные сведения см. в разделе Конструирование сущностей.For more information, see Entity construction.

Пример триггера (JavaScript)Trigger sample (JavaScript)

Следующий код является примером простой сущности счетчика , реализованной в виде устойчивой функции, написанной на JavaScript.The following code is an example of a simple Counter entity implemented as a durable function written in JavaScript. Эта функция определяет три операции: add, reset и get, каждая из которых изменяет целочисленное значение состояния.This function defines three operations, add, reset, and get, each of which operate on an integer state.

function.jsonfunction.json

{
  "bindings": [
    {
      "name": "context",
      "type": "entityTrigger",
      "direction": "in"
    }
  ],
  "disabled": false
}

index.jsindex.js

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

module.exports = df.entity(function(context) {
    const currentValue = context.df.getState(() => 0);
    switch (context.df.operationName) {
        case "add":
            const amount = context.df.getInput();
            context.df.setState(currentValue + amount);
            break;
        case "reset":
            context.df.setState(0);
            break;
        case "get":
            context.df.return(currentValue);
            break;
    }
});

Примечание

Устойчивые сущности доступны в JavaScript начиная с версии 1.3.0 пакета npm durable-functions.Durable entities are available in JavaScript starting with version 1.3.0 of the durable-functions npm package.

Клиент сущностиEntity client

Привязка клиента сущности позволяет асинхронно активировать функции сущностей.The entity client binding enables you to asynchronously trigger entity functions. Эти функции иногда называют клиентскими функциями.These functions are sometimes referred to as client functions.

Если вы используете Visual Studio, можно выполнить привязку к клиенту сущности с помощью атрибута DurableClientAttribute .NET.If you're using Visual Studio, you can bind to the entity client by using the DurableClientAttribute .NET attribute.

Примечание

[DurableClientAttribute] также можно использовать для привязки к клиенту оркестрации.The [DurableClientAttribute] can also be used to bind to the orchestration client.

Если вы используете языки сценариев (например, файлы CSX или JS ) для разработки, триггер СУЩНОСТИ определяется следующим объектом JSON в bindings массиве файла Function. JSON:If you're using scripting languages (for example, .csx or .js files) for development, the entity trigger is defined by the following JSON object in the bindings array of 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 используется в ситуациях, когда несколько приложений-функций совместно используют одну и ту же учетную запись хранения, но должны быть изолированы друг от друга.taskHub - Used in scenarios where multiple function apps share the same storage account but need to be isolated from each other. Если значение не задано, по умолчанию используется значение из host.json.If not specified, the default value from host.json is used. Это значение должно соответствовать значению, используемому целевыми функциями сущности.This value must match the value used by the target entity functions.
  • connectionName — имя параметра приложения, содержащего строку подключения к учетной записи хранения.connectionName - The name of an app setting that contains a storage account connection string. Учетная запись хранения, представленная этой строкой подключения, должна быть той же, которая используется целевыми функциями сущности.The storage account represented by this connection string must be the same one used by the target entity functions. Если она не указана, для приложения-функции используется строка подключения к учетной записи хранения по умолчанию.If not specified, the default storage account connection string for the function app is used.

Примечание

В большинстве случаев рекомендуется опустить необязательные свойства и полагаться на поведение по умолчанию.In most cases, we recommend that you omit the optional properties and rely on the default behavior.

Использование клиента сущностиEntity client usage

В функциях .NET обычно выполняется привязка к IDurableEntityClient, которая предоставляет полный доступ ко всем клиентским API, поддерживаемым устойчивыми сущностями.In .NET functions, you typically bind to IDurableEntityClient, which gives you full access to all client APIs supported by Durable Entities. Также можно выполнить привязку к интерфейсу IDurableOrchestrationClient, который предоставляет доступ к клиентским API как для сущностей, так и для оркестрации.You can also bind to the IDurableOrchestrationClient interface, which provides access to client APIs for both entities and orchestrations. API-интерфейсы в клиентском объекте включают в себя:APIs on the client object include:

  • Реадентитистатеасинк<t > : считывает состояние сущности.ReadEntityStateAsync<T>: reads the state of an entity. Он возвращает ответ, указывающий, существует ли целевая сущность, и, если да, то что ее состояние —.It returns a response that indicates whether the target entity exists, and if so, what its state is.
  • Сигналентитясинк: отправляет одностороннее сообщение в сущность и ожидает его постановки в очередь.SignalEntityAsync: sends a one-way message to an entity, and waits for it to be enqueued.
  • Листентитиесасинк: запросы состояния нескольких сущностей.ListEntitiesAsync: queries for the state of multiple entities. К сущностям можно обращаться по имени и времени последней операции.Entities can be queried by name and last operation time.

Нет необходимости создавать целевую сущность перед отправкой сигнала. состояние сущности можно создать в функции сущности, которая обрабатывает сигнал.There is no need to create the target entity before sending a signal - the entity state can be created from within the entity function that handles the signal.

Примечание

Важно понимать, что "сигналы", отправленные клиентом, просто помещаются в очередь, чтобы обрабатываться асинхронно позже.It's important to understand that the "signals" sent from the client are simply enqueued, to be processed asynchronously at a later time. В частности, SignalEntityAsync обычно возвращает, прежде чем сущность начинает операцию, и вернуть возвращаемое значение или наблюдать за исключениями невозможно.In particular, the SignalEntityAsync usually returns before the entity even starts the operation, and it is not possible to get back the return value or observe exceptions. Если требуются более надежные гарантии (например, для рабочих процессов), следует использовать функции Orchestrator , которые могут ожидать завершения операций сущностей и могут обрабатывать возвращаемые значения и наблюдать за исключениями.If stronger guarantees are required (e.g. for workflows), orchestrator functions should be used, which can wait for entity operations to complete, and can process return values and observe exceptions.

Пример. Клиент сообщает сущности напрямую —C#Example: client signals entity directly - C#

Ниже приведен пример функции, активируемой в очереди, которая вызывает сущность "Counter".Here is an example queue-triggered function that invokes a "Counter" entity.

[FunctionName("AddFromQueue")]
public static Task Run(
    [QueueTrigger("durable-function-trigger")] string input,
    [DurableClient] IDurableEntityClient client)
{
    // Entity operation input comes from the queue message content.
    var entityId = new EntityId(nameof(Counter), "myCounter");
    int amount = int.Parse(input);
    return client.SignalEntityAsync(entityId, "Add", amount);
}

Пример: клиент сигнализирует о сущности через интерфейс —C#Example: client signals entity via interface - C#

По возможности рекомендуется обращаться к сущностям через интерфейсы , так как она обеспечивает дополнительную проверку типов.Where possible, we recommend accessing entities through interfaces because it provides more type checking. Например, предположим, что Counter сущность, упомянутая ранее, реализовала интерфейс ICounter, определенный следующим образом:For example, suppose the Counter entity mentioned earlier implemented an ICounter interface, defined as follows:

public interface ICounter
{
    void Add(int amount);
    void Reset();
    Task<int> Get();
}

public class Counter : ICounter
{
    // ...
}

Затем клиентский код может использовать SignalEntityAsync<ICounter> для создания строго типизированного прокси-сервера:Client code can then use SignalEntityAsync<ICounter> to generate a type-safe proxy:

[FunctionName("UserDeleteAvailable")]
public static async Task AddValueClient(
    [QueueTrigger("my-queue")] string message,
    [DurableClient] IDurableEntityClient client)
{
    var target = new EntityId(nameof(Counter), "myCounter");
    int amount = int.Parse(message);
    await client.SignalEntityAsync<ICounter>(target, proxy => proxy.Add(amount));
}

Параметр proxy — это динамически создаваемый экземпляр ICounter, который внутренне преобразует вызов Add в эквивалентный (нетипизированный) вызов в SignalEntityAsync.The proxy parameter is a dynamically generated instance of ICounter, which internally translates the call to Add into the equivalent (untyped) call to SignalEntityAsync.

Примечание

Интерфейсы API SignalEntityAsync представляют односторонние операции.The SignalEntityAsync APIs represent one-way operations. Если интерфейсы сущности возвращают Task<T>, значение параметра T всегда будет равно null или default.If an entity interfaces returns Task<T>, the value of the T parameter will always be null or default.

В частности, не имеет смысла сообщать о Getной операции, так как значение не возвращается.In particular, it does not make sense to signal the Get operation, as no value is returned. Вместо этого клиенты могут использовать либо ReadStateAsync для прямого доступа к состоянию счетчика, либо запустить функцию Orchestrator, которая вызывает операцию Get.Instead, clients can use either ReadStateAsync to access the counter state directly, or can start an orchestrator function that calls the Get operation.

Пример: Клиент сообщает сущность — JavaScriptExample: client signals entity - JavaScript

Ниже приведен пример функции, активируемой в очереди, которая сигнализирует сущности "Counter" в JavaScript.Here is an example queue-triggered function that signals a "Counter" entity in JavaScript.

function.jsonfunction.json

{
    "bindings": [
      {
        "name": "input",
        "type": "queueTrigger",
        "queueName": "durable-entity-trigger",
        "direction": "in",
      },
      {
        "name": "starter",
        "type": "durableClient",
        "direction": "in"
      }
    ],
    "disabled": false
  }

index.jsindex.js

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

module.exports = async function (context) {
    const client = df.getClient(context);
    const entityId = new df.EntityId("Counter", "myCounter");
    await context.df.signalEntity(entityId, "add", 1);
};

Примечание

Устойчивые сущности доступны в JavaScript начиная с версии 1.3.0 пакета npm durable-functions.Durable entities are available in JavaScript starting with version 1.3.0 of the durable-functions npm package.

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

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

Устойчивые функции 1. xDurable Functions 1.x

{
  "durableTask": {
    "hubName": "MyTaskHub",
    "controlQueueBatchSize": 32,
    "partitionCount": 4,
    "controlQueueVisibilityTimeout": "00:05:00",
    "workItemQueueVisibilityTimeout": "00:05:00",
    "maxConcurrentActivityFunctions": 10,
    "maxConcurrentOrchestratorFunctions": 10,
    "maxQueuePollingInterval": "00:00:30",
    "azureStorageConnectionStringName": "AzureWebJobsStorage",
    "trackingStoreConnectionStringName": "TrackingStorage",
    "trackingStoreNamePrefix": "DurableTask",
    "traceInputsAndOutputs": false,
    "logReplayEvents": false,
    "eventGridTopicEndpoint": "https://topic_name.westus2-1.eventgrid.azure.net/api/events",
    "eventGridKeySettingName":  "EventGridKey",
    "eventGridPublishRetryCount": 3,
    "eventGridPublishRetryInterval": "00:00:30",
    "eventGridPublishEventTypes": ["Started", "Completed", "Failed", "Terminated"]
  }
}

Устойчивые функции 2. xDurable Functions 2.x

{
  "durableTask": {
    "hubName": "MyTaskHub",
    "storageProvider": {
      "connectionStringName": "AzureWebJobsStorage",
      "controlQueueBatchSize": 32,
      "controlQueueBufferThreshold": 256,
      "controlQueueVisibilityTimeout": "00:05:00",
      "maxQueuePollingInterval": "00:00:30",
      "partitionCount": 4,
      "trackingStoreConnectionStringName": "TrackingStorage",
      "trackingStoreNamePrefix": "DurableTask",
      "workItemQueueVisibilityTimeout": "00:05:00",
    },
    "tracing": {
      "traceInputsAndOutputs": false,
      "traceReplayEvents": false,
    },
    "notifications": {
      "eventGrid": {
        "topicEndpoint": "https://topic_name.westus2-1.eventgrid.azure.net/api/events",
        "keySettingName": "EventGridKey",
        "publishRetryCount": 3,
        "publishRetryInterval": "00:00:30",
        "publishEventTypes": [
          "Started",
          "Pending",
          "Failed",
          "Terminated"
        ]
      }
    },
    "maxConcurrentActivityFunctions": 10,
    "maxConcurrentOrchestratorFunctions": 10,
    "extendedSessionsEnabled": false,
    "extendedSessionIdleTimeoutInSeconds": 30,
    "useGracefulShutdown": false
  }
}

Имена центров задач должны начинаться с буквы и содержать только буквы и цифры.Task hub names must start with a letter and consist of only letters and numbers. Если имя не указано, центру задач в приложении-функции назначается имя по умолчанию DurableFunctionsHub.If not specified, the default task hub name for a function app is DurableFunctionsHub. Дополнительные сведения см. в статье о центрах задач.For more information, see Task hubs.

СвойствоProperty По умолчаниюDefault DescriptionDescription
hubNamehubName DurableFunctionsHubDurableFunctionsHub Альтернативные имена центра задач позволяют изолировать несколько приложений устойчивых функций друг от друга, даже если они используют один и тот же интерфейс хранилища.Alternate task hub names can be used to isolate multiple Durable Functions applications from each other, even if they're using the same storage backend.
контролкуеуебатчсизеcontrolQueueBatchSize 3232 Количество сообщений, одновременно извлекаемых из очереди управления.The number of messages to pull from the control queue at a time.
контролкуеуебуфферсрешолдcontrolQueueBufferThreshold 256256 Количество сообщений очереди управления, которые могут быть помещены в память за один раз, после чего диспетчер будет ожидать перед отправкой дополнительных сообщений.The number of control queue messages that can be buffered in memory at a time, at which point the dispatcher will wait before dequeuing any additional messages.
partitionCountpartitionCount 44 Число разделов для очереди управления.The partition count for the control queue. Допускается целочисленное значение в диапазоне от 1 до 16.May be a positive integer between 1 and 16.
контролкуеуевисибилититимеаутcontrolQueueVisibilityTimeout 5 мин5 minutes Время видимости для сообщений, выведенных из очереди управления.The visibility timeout of dequeued control queue messages.
воркитемкуеуевисибилититимеаутworkItemQueueVisibilityTimeout 5 мин5 minutes Время видимости для сообщений, выведенных из очереди рабочих элементов.The visibility timeout of dequeued work item queue messages.
максконкуррентактивитифунктионсmaxConcurrentActivityFunctions 10× количество процессоров на текущем компьютере10X the number of processors on the current machine Максимальное число функции действия, которые могут параллельно обрабатываться на одном экземпляре узла.The maximum number of activity functions that can be processed concurrently on a single host instance.
максконкурренторчестраторфунктионсmaxConcurrentOrchestratorFunctions 10× количество процессоров на текущем компьютере10X the number of processors on the current machine Максимальное количество функций оркестратора, которые могут быть обработаны параллельно в одном экземпляре узла.The maximum number of orchestrator functions that can be processed concurrently on a single host instance.
макскуеуеполлингинтервалmaxQueuePollingInterval 30 секунд30 seconds Максимальный интервал опроса управления и очереди рабочих элементов в формате чч: мм: СС .The maximum control and work-item queue polling interval in the hh:mm:ss format. Более высокие значения могут привести к увеличению задержек при обработке сообщений.Higher values can result in higher message processing latencies. Более низкие значения могут привести к более высоким затратам на хранение из-за увеличенных транзакций хранилища.Lower values can result in higher storage costs because of increased storage transactions.
азуресторажеконнектионстрингнамеazureStorageConnectionStringName AzureWebJobsStorageAzureWebJobsStorage Имя параметра приложения, в котором хранится строка подключения к службе хранилища Azure для управления базовыми ресурсами этой службы.The name of the app setting that has the Azure Storage connection string used to manage the underlying Azure Storage resources.
траккингстореконнектионстрингнамеtrackingStoreConnectionStringName Имя строки подключения, используемой для таблиц журнала и экземпляров.The name of a connection string to use for the History and Instances tables. Если не указано, используется подключение azureStorageConnectionStringName.If not specified, the azureStorageConnectionStringName connection is used.
траккингсторенамепрефиксtrackingStoreNamePrefix Префикс, используемый для таблиц журнала и экземпляров при указании trackingStoreConnectionStringName.The prefix to use for the History and Instances tables when trackingStoreConnectionStringName is specified. Если значение не задано, префикс по умолчанию будет DurableTask.If not set, the default prefix value will be DurableTask. Если trackingStoreConnectionStringName не указан, то таблицы журнала и экземпляров будут использовать в качестве префикса значение hubName, а любой параметр для trackingStoreNamePrefix будет проигнорирован.If trackingStoreConnectionStringName is not specified, then the History and Instances tables will use the hubName value as their prefix, and any setting for trackingStoreNamePrefix will be ignored.
трацеинпутсандаутпутсtraceInputsAndOutputs falsefalse Это значение указывает, нужно ли отслеживать входы и выходы вызовов функций.A value indicating whether to trace the inputs and outputs of function calls. При трассировке событий выполнения функции по умолчанию для вызовов функций фиксируется количество байтов в сериализованных входных и выходных данных.The default behavior when tracing function execution events is to include the number of bytes in the serialized inputs and outputs for function calls. Это поведение предоставляет минимальные сведения о том, как выглядят входные и выходные данные без чрезмерного перекрытия журналов или непреднамеренного предоставления конфиденциальной информации.This behavior provides minimal information about what the inputs and outputs look like without bloating the logs or inadvertently exposing sensitive information. Если вы присвоите этому свойству значение true, в журналы выполнения функций будет включаться полное содержимое их входов и выходов.Setting this property to true causes the default function logging to log the entire contents of function inputs and outputs.
логреплайевентсlogReplayEvents falsefalse Значение, указывающее, следует ли записывать повторные события оркестрации в Application Insights.A value indicating whether to write orchestration replay events to Application Insights.
евентгридтопицендпоинтeventGridTopicEndpoint URL-адрес конечной точки пользовательского раздела службы "Сетка событий Azure".The URL of an Azure Event Grid custom topic endpoint. Если это свойство задано, события уведомления о жизненном цикле оркестрации публикуются в этой конечной точке.When this property is set, orchestration life-cycle notification events are published to this endpoint. Это свойство поддерживает разрешение параметров приложения.This property supports App Settings resolution.
евентгридкэйсеттингнамеeventGridKeySettingName Имя параметра приложения, содержащего ключ для аутентификации в пользовательском разделе службы "Сетка событий Azure" в EventGridTopicEndpoint.The name of the app setting containing the key used for authenticating with the Azure Event Grid custom topic at EventGridTopicEndpoint.
евентгридпублишретрикаунтeventGridPublishRetryCount 00 Число повторных попыток, если публикация в разделе "Сетка событий" завершается сбоем.The number of times to retry if publishing to the Event Grid Topic fails.
евентгридпублишретринтервалeventGridPublishRetryInterval 5 мин5 minutes Интервал повторных попыток для публикации в разделе "Сетка событий" указывается в формате чч: мм:сс.The Event Grid publishes retry interval in the hh:mm:ss format.
евентгридпублишевенттипесeventGridPublishEventTypes Список типов событий для публикации в сетке событий.A list of event types to publish to Event Grid. Если не указано, будут опубликованы все типы событий.If not specified, all event types will be published. Допустимые значения: Started, Completed, Failed, Terminated.Allowed values include Started, Completed, Failed, Terminated.
усеграцефулшутдовнuseGracefulShutdown falsefalse Образца Включите корректное завершение работы, чтобы снизить вероятность того, что при завершении работы функции не удается завершить работу.(Preview) Enable gracefully shutting down to reduce the chance of host shutdowns failing in-process function executions.

Многие из этих параметров предназначены для оптимизации производительности.Many of these settings are for optimizing performance. Дополнительные сведения см. в статье о производительности и масштабируемости.For more information, see Performance and scale.

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