Управление экземплярами в Устойчивых функциях в AzureManage instances in Durable Functions in Azure

Если вы используете расширение устойчивые функции для функций Azure или хотите приступить к этому, убедитесь, что вы получаете оптимальное использование.If you're using the Durable Functions extension for Azure Functions, or want to start doing so, make sure you're getting the best use out of it. Вы можете оптимизировать Устойчивые функции экземпляры оркестрации, изучите дополнительные сведения об управлении ими.You can optimize your Durable Functions orchestration instances by learning more about how to manage them. В этой статье подробно описаны все операции по управлению экземплярами.This article goes into the details of each instance management operation.

Можно запускать и завершать экземпляры, например, а также выполнять запросы к экземплярам, в том числе возможность запрашивать все экземпляры и экземпляры запросов с фильтрами.You can start and terminate instances, for example, and you can query instances, including the ability to query all instances and query instances with filters. Кроме того, можно отправить события в экземпляры, дождаться завершения оркестрации и получить URL-адреса веб-перехватчиков управления HTTP.Additionally, you can send events to instances, wait for orchestration completion, and retrieve HTTP management webhook URLs. В этой статье также рассматриваются другие операции управления, включая сброс экземпляров, очистку журнала экземпляра и удаление центра задач.This article covers other management operations, too, including rewinding instances, purging instance history, and deleting a task hub.

В Устойчивые функции есть варианты реализации каждой из этих операций управления.In Durable Functions, you have options for how you want to implement each of these management operations. В этой статье приведены примеры использования Azure functions Core Tools для .NET (C#) и JavaScript.This article provides examples that use the Azure Functions Core Tools for both .NET (C#) and JavaScript.

Запуск экземпляровStart instances

Важно иметь возможность запустить экземпляр оркестрации.It's important to be able to start an instance of orchestration. Обычно это делается при использовании привязки Устойчивые функции в триггере другой функции.This is commonly done when you are using a Durable Functions binding in another function's trigger.

Метод StartNewAsync (.NET) или startNew (JavaScript) на привязке клиента оркестрации запускает новый экземпляр.The StartNewAsync (.NET) or startNew (JavaScript) method on the orchestration client binding starts a new instance. На внутреннем уровне этот метод помещает сообщение в очередь управления, что затем активирует начало функции с заданным именем, которое использует привязку триггера оркестрации.Internally, this method enqueues a message into the control queue, which then triggers the start of a function with the specified name that uses the orchestration trigger binding.

Эта асинхронная операция завершается после успешного планирования процесса оркестрации.This async operation completes when the orchestration process is successfully scheduled.

Ниже приведены параметры для запуска нового экземпляра оркестрации.The parameters for starting a new orchestration instance are as follows:

  • Name. Имя функции оркестратора, для которой назначается запуск.Name: The name of the orchestrator function to schedule.
  • Input. Любые данные, сериализуемые в формат JSON, которые нужно передать в функцию оркестратора как входные данные.Input: Any JSON-serializable data that should be passed as the input to the orchestrator function.
  • InstanceId. Уникальный идентификатор экземпляра (необязательно).InstanceId: (Optional) The unique ID of the instance. Если этот параметр не указан, метод использует случайный идентификатор.If you don't specify this parameter, the method uses a random ID.

Совет

Используйте случайный идентификатор экземпляра.Use a random identifier for the instance ID. Случайные идентификаторы экземпляров обеспечивают равномерное распределение нагрузки при масштабировании функций Orchestrator на нескольких виртуальных машинах.Random instance IDs help ensure an equal load distribution when you're scaling orchestrator functions across multiple VMs. Правильное время на использование идентификаторов экземпляров, которые не являются случайными, заключается в том, что идентификатор должен поступать из внешнего источника или при реализации одноэлементного шаблона Orchestrator .The proper time to use non-random instance IDs is when the ID must come from an external source, or when you're implementing the singleton orchestrator pattern.

Следующий код является примером функции, запускающей новый экземпляр оркестрации:The following code is an example function that starts a new orchestration instance:

[FunctionName("HelloWorldManualStart")]
public static async Task Run(
    [ManualTrigger] string input,
    [DurableClient] IDurableOrchestrationClient starter,
    ILogger log)
{
    string instanceId = await starter.StartNewAsync("HelloWorld", input);
    log.LogInformation($"Started orchestration with ID = '{instanceId}'.");
}

Примечание

Предыдущий 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.

Azure Functions Core ToolsAzure Functions Core Tools

Кроме того, экземпляр можно запустить непосредственно с помощью команды Azure Functions Core Tools durable start-new.You can also start an instance directly by using the Azure Functions Core Tools durable start-new command. Она принимает следующие параметры.It takes the following parameters:

  • function-name (обязательно) : имя запускаемой функции.function-name (required): Name of the function to start.
  • input (необязательно) : входные данные функции, встроенные или с помощью JSON-файла.input (optional): Input to the function, either inline or through a JSON file. Для файлов добавьте префикс в путь к файлу с @, например @path/to/file.json.For files, add a prefix to the path to the file with @, such as @path/to/file.json.
  • id (необязательный) : идентификатор экземпляра оркестрации.id (optional): ID of the orchestration instance. Если этот параметр не указан, команда использует случайный идентификатор GUID.If you don't specify this parameter, the command uses a random GUID.
  • connection-string-setting (необязательный) : имя параметра приложения, содержащего нужную строку подключения к хранилищу.connection-string-setting (optional): Name of the application setting containing the storage connection string to use. По умолчанию используется AzureWebJobsStorage.The default is AzureWebJobsStorage.
  • task-hub-name (необязательно) : имя используемого центра задач устойчивые функции.task-hub-name (optional): Name of the Durable Functions task hub to use. По умолчанию используется DurableFunctionsHub.The default is DurableFunctionsHub. Его также можно задать в Host. JSON с помощью DurableTask: HubName.You can also set this in host.json by using durableTask:HubName.

Примечание

Команды основных средств предполагают, что вы используете их из корневого каталога приложения-функции.Core Tools commands assume you are running them from the root directory of a function app. При явном предоставлении параметров connection-string-setting и task-hub-name можно выполнять команды из любого каталога.If you explicitly provide the connection-string-setting and task-hub-name parameters, you can run the commands from any directory. Несмотря на то, что эти команды можно выполнять без работающего узла приложения-функции, может оказаться, что вы не можете наблюдать некоторые последствия, если только узел не запущен.Although you can run these commands without a function app host running, you might find that you can't observe some effects unless the host is running. Например, команда start-new помещает в целевой центр задач сообщение о запуске, но согласование не выполняется, если не запущен процесс размещения приложения-функции, который может обработать сообщение.For example, the start-new command enqueues a start message into the target task hub, but the orchestration doesn't actually run unless there is a function app host process running that can process the message.

Следующая команда запускает функцию HelloWorld и передает ей содержимое файла counter-data.json:The following command starts the function named HelloWorld, and passes the contents of the file counter-data.json to it:

func durable start-new --function-name HelloWorld --input @counter-data.json --task-hub-name TestTaskHub

Экземпляры запросовQuery instances

В рамках усилий по управлению взаимодействием, скорее всего, потребуется собрать сведения о состоянии экземпляра оркестрации (например, о том, завершился ли он нормально или неудачно).As part of your effort to manage your orchestrations, you'll most likely need to gather information about the status of an orchestration instance (for example, whether it has completed normally or failed).

Метод GetStatusAsync (.NET) или getStatus (JavaScript) в привязке клиента оркестрации запрашивает состояние экземпляра оркестрации.The GetStatusAsync (.NET) or the getStatus (JavaScript) method on the orchestration client binding queries the status of an orchestration instance.

Он принимает параметры instanceId (обязательный), showHistory (необязательный), showHistoryOutput (необязательный) и showInput (необязательный).It takes an instanceId (required), showHistory (optional), showHistoryOutput (optional), and showInput (optional) as parameters.

  • showHistory . Если задано значение true, ответ содержит журнал выполнения.showHistory: If set to true, the response contains the execution history.
  • showHistoryOutput : Если задано значение true, журнал выполнения содержит выходные данные действия.showHistoryOutput: If set to true, the execution history contains activity outputs.
  • showInput . Если задано значение false, ответ не будет содержать входные данные функции.showInput: If set to false, the response won't contain the input of the function. Значение по умолчанию — true.The default value is true.

Этот метод возвращает объект со следующими свойствами:The method returns an object with the following properties:

  • Name. Имя функции оркестратора.Name: The name of the orchestrator function.
  • InstanceId. Идентификатор экземпляра оркестрации (будет совпадать с переданным значением instanceId).InstanceId: The instance ID of the orchestration (should be the same as the instanceId input).
  • CreatedTime. Время создания, то есть время начала выполнения функции оркестратора.CreatedTime: The time at which the orchestrator function started running.
  • LastUpdatedTime. Время прохождения последней контрольной точки оркестрации.LastUpdatedTime: The time at which the orchestration last checkpointed.
  • Input. Входные данные функции в формате JSON.Input: The input of the function as a JSON value. Это поле не заполняется, если showInput имеет значение false.This field isn't populated if showInput is false.
  • CustomStatus. Настраиваемое значение состояния оркестрации в формате JSON.CustomStatus: Custom orchestration status in JSON format.
  • Output. Выходные данные функции в формате JSON (если выполнение функции успешно завершено).Output: The output of the function as a JSON value (if the function has completed). Если не удалось выполнить функцию Orchestrator, это свойство содержит сведения об ошибке.If the orchestrator function failed, this property includes the failure details. Если функция Orchestrator была прервана, это свойство включает причину завершения (если есть).If the orchestrator function was terminated, this property includes the reason for the termination (if any).
  • RuntimeStatus. Состояние выполнения может иметь одно из следующих значений:RuntimeStatus: One of the following values:
    • Pending. Выполнение экземпляра было запланировано, но еще не начато.Pending: The instance has been scheduled but has not yet started running.
    • Running. Началось выполнение экземпляра.Running: The instance has started running.
    • Completed. Выполнение экземпляра завершилось в обычном режиме.Completed: The instance has completed normally.
    • ContinuedAsNew. Экземпляр выполнил перезапуск с очисткой журнала выполнения.ContinuedAsNew: The instance has restarted itself with a new history. Это состояние является временным.This state is a transient state.
    • Failed. Выполнение экземпляра завершилось ошибкой.Failed: The instance failed with an error.
    • Terminated: выполнение экземпляра было прервано.Terminated: The instance was stopped abruptly.
  • History: журнал выполнения оркестрации.History: The execution history of the orchestration. Это поле заполняется, только если showHistory имеет значение true.This field is only populated if showHistory is set to true.

Этот метод возвращает null (.NET) или undefined (JavaScript), если экземпляр не существует.This method returns null (.NET) or undefined (JavaScript) if the instance doesn't exist.

[FunctionName("GetStatus")]
public static async Task Run(
    [DurableClient] IDurableOrchestrationClient client,
    [ManualTrigger] string instanceId)
{
    DurableOrchestrationStatus status = await client.GetStatusAsync(instanceId);
    // do something based on the current status.
}

Примечание

Предыдущий 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.

Azure Functions Core ToolsAzure Functions Core Tools

Также можно напрямую получить состояние экземпляра оркестрации с помощью команды Azure Functions Core Tools durable get-runtime-status.It's also possible to get the status of an orchestration instance directly, by using the Azure Functions Core Tools durable get-runtime-status command. Она принимает следующие параметры.It takes the following parameters:

  • id (обязательно) : идентификатор экземпляра оркестрации.id (required): ID of the orchestration instance.
  • show-input (необязательно) . Если задано значение true, ответ содержит входные данные функции.show-input (optional): If set to true, the response contains the input of the function. Значение по умолчанию — false.The default value is false.
  • show-output (необязательно) . Если задано значение true, ответ содержит выходные данные функции.show-output (optional): If set to true, the response contains the output of the function. Значение по умолчанию — false.The default value is false.
  • connection-string-setting (необязательный) : имя параметра приложения, содержащего нужную строку подключения к хранилищу.connection-string-setting (optional): Name of the application setting containing the storage connection string to use. Значение по умолчанию — AzureWebJobsStorage.The default is AzureWebJobsStorage.
  • task-hub-name (необязательно) : имя используемого центра задач устойчивые функции.task-hub-name (optional): Name of the Durable Functions task hub to use. Значение по умолчанию — DurableFunctionsHub.The default is DurableFunctionsHub. Его также можно задать в Host. JSONс помощью DurableTask: HubName.It can also be set in host.json, by using durableTask:HubName.

Следующая команда извлекает состояние (включая входные и выходные данные) экземпляра с ИДЕНТИФИКАТОРом экземпляра оркестрации 0ab8c55a66644d68a3a8b220b12d209c.The following command retrieves the status (including input and output) of an instance with an orchestration instance ID of 0ab8c55a66644d68a3a8b220b12d209c. Предполагается, что вы выполняете команду func из корневого каталога приложения функции:It assumes that you are running the func command from the root directory of the function app:

func durable get-runtime-status --id 0ab8c55a66644d68a3a8b220b12d209c --show-input true --show-output true

Для получения журнала экземпляра оркестрации можно использовать команду durable get-history.You can use the durable get-history command to retrieve the history of an orchestration instance. Она принимает следующие параметры.It takes the following parameters:

  • id (обязательно) : идентификатор экземпляра оркестрации.id (required): ID of the orchestration instance.
  • connection-string-setting (необязательный) : имя параметра приложения, содержащего нужную строку подключения к хранилищу.connection-string-setting (optional): Name of the application setting containing the storage connection string to use. Значение по умолчанию — AzureWebJobsStorage.The default is AzureWebJobsStorage.
  • task-hub-name (необязательно) : имя используемого центра задач устойчивые функции.task-hub-name (optional): Name of the Durable Functions task hub to use. Значение по умолчанию — DurableFunctionsHub.The default is DurableFunctionsHub. Его также можно задать в Host. JSON с помощью durableTask: HubName.It can also be set in host.json, by using durableTask:HubName.
func durable get-history --id 0ab8c55a66644d68a3a8b220b12d209c

Запрос всех экземпляровQuery all instances

Вместо того, чтобы запрашивать один экземпляр в согласовании одновременно, может оказаться, что он более эффективен для выполнения запросов сразу.Rather than query one instance in your orchestration at a time, you might find it more efficient to query all of them at once.

С помощью метода GetStatusAsync (.NET) или getStatusAll (JavaScript) вы можете запросить данные о состоянии всех экземпляров оркестрации.You can use the GetStatusAsync (.NET) or getStatusAll (JavaScript) method to query the statuses of all orchestration instances. В .NET можно передать объект CancellationToken на случай, если вы хотите отменить его.In .NET, you can pass a CancellationToken object in case you want to cancel it. Метод возвращает объекты с теми же свойствами, что и метод GetStatusAsync с параметрами.The method returns objects with the same properties as the GetStatusAsync method with parameters.

[FunctionName("GetAllStatus")]
public static async Task Run(
    [HttpTrigger(AuthorizationLevel.Anonymous, "get", "post")]HttpRequestMessage req,
    [DurableClient] IDurableOrchestrationClient client,
    ILogger log)
{
    IList<DurableOrchestrationStatus> instances = await client.GetStatusAsync(); // You can pass CancellationToken as a parameter.
    foreach (var instance in instances)
    {
        log.LogInformation(JsonConvert.SerializeObject(instance));
    };
}

Примечание

Предыдущий 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.

Azure Functions Core ToolsAzure Functions Core Tools

Кроме того, можно напрямую запрашивать экземпляры с помощью команды Azure Functions Core Tools durable get-instances.It's also possible to query instances directly, by using the Azure Functions Core Tools durable get-instances command. Она принимает следующие параметры.It takes the following parameters:

  • top (необязательный) : эта команда поддерживает разбиение на страницы.top (optional): This command supports paging. Этот параметр соответствует количеству экземпляров, получаемых по запросу.This parameter corresponds to the number of instances retrieved per request. Значение по умолчанию равно 10.The default is 10.
  • continuation-token (необязательно) : токен, указывающий, какую страницу или раздел экземпляров нужно извлечь.continuation-token (optional): A token to indicate which page or section of instances to retrieve. Каждое выполнение get-instances возвращает маркер для извлечения следующего набора экземпляров.Each get-instances execution returns a token to the next set of instances.
  • connection-string-setting (необязательный) : имя параметра приложения, содержащего нужную строку подключения к хранилищу.connection-string-setting (optional): Name of the application setting containing the storage connection string to use. Значение по умолчанию — AzureWebJobsStorage.The default is AzureWebJobsStorage.
  • task-hub-name (необязательно) : имя используемого центра задач устойчивые функции.task-hub-name (optional): Name of the Durable Functions task hub to use. Значение по умолчанию — DurableFunctionsHub.The default is DurableFunctionsHub. Его также можно задать в Host. JSONс помощью DurableTask: HubName.It can also be set in host.json, by using durableTask:HubName.
func durable get-instances

Экземпляры запросов с фильтрамиQuery instances with filters

Что делать, если вам не нужна вся информация, которую может предоставить запрос стандартного экземпляра?What if you don't really need all the information that a standard instance query can provide? Например, что делать, если вы просто ищете время создания оркестрации или состояние среды выполнения оркестрации?For example, what if you're just looking for the orchestration creation time, or the orchestration runtime status? Вы можете ограничивать запрос, применяя фильтры.You can narrow your query by applying filters.

Используйте метод GetStatusAsync (.NET) или getStatusBy (JavaScript) для получения списка экземпляров оркестрации, соответствующих набору предопределенных фильтров.Use the GetStatusAsync (.NET) or getStatusBy (JavaScript) method to get a list of orchestration instances that match a set of predefined filters.

[FunctionName("QueryStatus")]
public static async Task Run(
    [HttpTrigger(AuthorizationLevel.Anonymous, "get", "post")]HttpRequestMessage req,
    [DurableClient] IDurableOrchestrationClient client,
    ILogger log)
{
    var runtimeStatus = new List<OrchestrationRuntimeStatus> {
        OrchestrationRuntimeStatus.Completed,
        OrchestrationRuntimeStatus.Running
    };
    IList<DurableOrchestrationStatus> instances = await starter.GetStatusAsync(
        new DateTime(2018, 3, 10, 10, 1, 0),
        new DateTime(2018, 3, 10, 10, 23, 59),
        runtimeStatus
    ); // You can pass CancellationToken as a parameter.
    foreach (var instance in instances)
    {
        log.LogInformation(JsonConvert.SerializeObject(instance));
    };
}

Примечание

Предыдущий 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.

Azure Functions Core ToolsAzure Functions Core Tools

В Azure Functions Core Tools можно также использовать команду durable get-instances с фильтрами.In the Azure Functions Core Tools, you can also use the durable get-instances command with filters. В дополнение к вышеупомянутым параметрам top, continuation-token, connection-string-settingи task-hub-name можно использовать три параметра фильтра (created-after, created-beforeи runtime-status).In addition to the aforementioned top, continuation-token, connection-string-setting, and task-hub-name parameters, you can use three filter parameters (created-after, created-before, and runtime-status).

  • created-after (необязательный) : получение экземпляров, созданных после этой даты и времени в формате UTC.created-after (optional): Retrieve the instances created after this date/time (UTC). Принимаются значения даты и времени в формате ISO 8601.ISO 8601 formatted datetimes accepted.
  • created-before (необязательный) : получение экземпляров, созданных до этой даты и времени в формате UTC.created-before (optional): Retrieve the instances created before this date/time (UTC). Принимаются значения даты и времени в формате ISO 8601.ISO 8601 formatted datetimes accepted.
  • runtime-status (необязательно) : получение экземпляров с определенным состоянием (например, "выполняется" или "завершено").runtime-status (optional): Retrieve the instances with a particular status (for example, running or completed). Можно указать несколько состояний (через пробел).Can provide multiple (space separated) statuses.
  • top (необязательный) : количество экземпляров, получаемых по запросу.top (optional): Number of instances retrieved per request. Значение по умолчанию равно 10.The default is 10.
  • continuation-token (необязательно) : токен, указывающий, какую страницу или раздел экземпляров нужно извлечь.continuation-token (optional): A token to indicate which page or section of instances to retrieve. Каждое выполнение get-instances возвращает маркер для извлечения следующего набора экземпляров.Each get-instances execution returns a token to the next set of instances.
  • connection-string-setting (необязательный) : имя параметра приложения, содержащего нужную строку подключения к хранилищу.connection-string-setting (optional): Name of the application setting containing the storage connection string to use. Значение по умолчанию — AzureWebJobsStorage.The default is AzureWebJobsStorage.
  • task-hub-name (необязательно) : имя используемого центра задач устойчивые функции.task-hub-name (optional): Name of the Durable Functions task hub to use. Значение по умолчанию — DurableFunctionsHub.The default is DurableFunctionsHub. Его также можно задать в Host. JSONс помощью DurableTask: HubName.It can also be set in host.json, by using durableTask:HubName.

Если не указать фильтры (created-after, created-beforeили runtime-status), команда просто извлекает экземпляры top, не обращаясь в состояние выполнения или время создания.If you don't provide any filters (created-after, created-before, or runtime-status), the command simply retrieves top instances, with no regard to runtime status or creation time.

func durable get-instances --created-after 2018-03-10T13:57:31Z --created-before  2018-03-10T23:59Z --top 15

Завершить экземплярыTerminate instances

Если у вас есть экземпляр оркестрации, выполнение которого занимает слишком много времени, или необходимо остановить его до завершения по какой-либо причине, у вас есть возможность завершить его.If you have an orchestration instance that is taking too long to run, or you just need to stop it before it completes for any reason, you have the option to terminate it.

Для завершения экземпляров можно использовать метод TerminateAsync (.NET) или terminate (JavaScript) привязки клиента оркестрации .You can use the TerminateAsync (.NET) or the terminate (JavaScript) method of the orchestration client binding to terminate instances. Эти два параметра являются instanceId и reason строкой, которая записывается в журналы и в состояние экземпляра.The two parameters are an instanceId and a reason string, which are written to logs and to the instance status.

[FunctionName("TerminateInstance")]
public static Task Run(
    [DurableClient] IDurableOrchestrationClient client,
    [ManualTrigger] string instanceId)
{
    string reason = "It was time to be done.";
    return client.TerminateAsync(instanceId, reason);
}

Примечание

Предыдущий 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.

Завершенный экземпляр будет в конечном итоге переходить в состояние Terminated.A terminated instance will eventually transition into the Terminated state. Однако этот переход не будет выполняться немедленно.However, this transition will not happen immediately. Вместо этого операция завершения будет поставлена в очередь в центре задач вместе с другими операциями для этого экземпляра.Rather, the terminate operation will be queued in the task hub along with other operations for that instance. Интерфейсы API запроса экземпляра можно использовать для получения сведений о том, когда прерванный экземпляр фактически достиг состояния Terminated.You can use the instance query APIs to know when a terminated instance has actually reached the Terminated state.

Примечание

Прекращение работы экземпляра в настоящее время не распространяется.Instance termination doesn't currently propagate. Функции действий и взаимосвязи выполняются до завершения независимо от того, был ли завершен экземпляр оркестрации, вызвавший их.Activity functions and sub-orchestrations run to completion, regardless of whether you've terminated the orchestration instance that called them.

Azure Functions Core ToolsAzure Functions Core Tools

Кроме того, экземпляр оркестрации можно завершить напрямую, используя команду Azure Functions Core Tools durable terminate.You can also terminate an orchestration instance directly, by using the Azure Functions Core Tools durable terminate command. Она принимает следующие параметры.It takes the following parameters:

  • id (обязательно) : идентификатор экземпляра оркестрации для завершения.id (required): ID of the orchestration instance to terminate.
  • reason (необязательно) : Причина завершения.reason (optional): Reason for termination.
  • connection-string-setting (необязательный) : имя параметра приложения, содержащего нужную строку подключения к хранилищу.connection-string-setting (optional): Name of the application setting containing the storage connection string to use. Значение по умолчанию — AzureWebJobsStorage.The default is AzureWebJobsStorage.
  • task-hub-name (необязательно) : имя используемого центра задач устойчивые функции.task-hub-name (optional): Name of the Durable Functions task hub to use. Значение по умолчанию — DurableFunctionsHub.The default is DurableFunctionsHub. Его также можно задать в Host. JSONс помощью DurableTask: HubName.It can also be set in host.json, by using durableTask:HubName.

Следующая команда завершает экземпляр оркестрации с ИДЕНТИФИКАТОРом 0ab8c55a66644d68a3a8b220b12d209c:The following command terminates an orchestration instance with an ID of 0ab8c55a66644d68a3a8b220b12d209c:

func durable terminate --id 0ab8c55a66644d68a3a8b220b12d209c --reason "It was time to be done."

Отправка событий в экземплярыSend events to instances

В некоторых случаях очень важно, чтобы функции Orchestrator могли ожидать и прослушивать внешние события.In some scenarios, it's important for your orchestrator functions to be able to wait and listen for external events. Сюда входят функции и функции мониторинга, ожидающие взаимодействия человека.This includes monitor functions and functions that are waiting for human interaction.

Отправка уведомлений о событиях в выполняемые экземпляры с помощью метода RaiseEventAsync (.NET) или метода raiseEvent (JavaScript) привязки клиента orchestration.Send event notifications to running instances by using the RaiseEventAsync (.NET) method or the raiseEvent (JavaScript) method of the orchestration client binding. Экземпляры, которые могут выполнять эти события, — это те, которые ожидают вызова WaitForExternalEvent (.NET) или вызова метода waitForExternalEvent (JavaScript).Instances that can handle these events are those that are awaiting a call to WaitForExternalEvent (.NET) or yielding to a waitForExternalEvent (JavaScript) call.

Ниже приведены параметры для RaiseEventAsync (.NET) и raiseEvent (JavaScript).The parameters to RaiseEventAsync (.NET) and raiseEvent (JavaScript) are as follows:

  • InstanceId — уникальный идентификатор экземпляра;InstanceId: The unique ID of the instance.
  • EventName — имя отправляемого события;EventName: The name of the event to send.
  • EventData — данные полезной нагрузки в формате JSON, отправляемые в экземпляр.EventData: A JSON-serializable payload to send to the instance.
[FunctionName("RaiseEvent")]
public static Task Run(
    [DurableClient] IDurableOrchestrationClient client,
    [ManualTrigger] string instanceId)
{
    int[] eventData = new int[] { 1, 2, 3 };
    return client.RaiseEventAsync(instanceId, "MyEvent", eventData);
}

Примечание

Предыдущий 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.

Примечание

Если экземпляр оркестрации с указанным ИДЕНТИФИКАТОРом экземпляра отсутствует, сообщение о событии отбрасывается.If there is no orchestration instance with the specified instance ID, the event message is discarded. Если экземпляр существует, но еще не ожидает событие, то событие будет храниться в состоянии экземпляра до тех пор, пока оно не будет готово к получению и обработке.If an instance exists but it is not yet waiting for the event, the event will be stored in the instance state until it is ready to be received and processed.

Azure Functions Core ToolsAzure Functions Core Tools

Событие можно также вызвать непосредственно в экземпляре оркестрации с помощью команды Azure Functions Core Tools durable raise-event.You can also raise an event to an orchestration instance directly, by using the Azure Functions Core Tools durable raise-event command. Она принимает следующие параметры.It takes the following parameters:

  • id (обязательно) : идентификатор экземпляра оркестрации.id (required): ID of the orchestration instance.
  • event-name : имя события, которое необходимо вызвать.event-name: Name of the event to raise.
  • event-data (необязательный) : данные, отправляемые в экземпляр оркестрации.event-data (optional): Data to send to the orchestration instance. Это может быть путь к JSON-файлу или данные, которые можно указать непосредственно в командной строке.This can be the path to a JSON file, or you can provide the data directly on the command line.
  • connection-string-setting (необязательный) : имя параметра приложения, содержащего нужную строку подключения к хранилищу.connection-string-setting (optional): Name of the application setting containing the storage connection string to use. Значение по умолчанию — AzureWebJobsStorage.The default is AzureWebJobsStorage.
  • task-hub-name (необязательно) : имя используемого центра задач устойчивые функции.task-hub-name (optional): Name of the Durable Functions task hub to use. Значение по умолчанию — DurableFunctionsHub.The default is DurableFunctionsHub. Его также можно задать в Host. JSONс помощью DurableTask: HubName.It can also be set in host.json, by using durableTask:HubName.
func durable raise-event --id 0ab8c55a66644d68a3a8b220b12d209c --event-name MyEvent --event-data @eventdata.json
func durable raise-event --id 1234567 --event-name MyOtherEvent --event-data 3

Дождитесь, пока завершится оркестрация.Wait for orchestration completion

В долгосрочных согласованиях может потребоваться подождать и получить результаты оркестрации.In long-running orchestrations, you may want to wait and get the results of an orchestration. В таких случаях также полезно иметь возможность определить период времени ожидания для оркестрации.In these cases, it's also useful to be able to define a timeout period on the orchestration. При превышении времени ожидания возвращается состояние оркестрации, а не результаты.If the timeout is exceeded, the state of the orchestration should be returned instead of the results.

Для синхронного получения фактических выходных данных из экземпляра оркестрации можно использовать WaitForCompletionOrCreateCheckStatusResponseAsync (.NET) или метод waitForCompletionOrCreateCheckStatusResponse (JavaScript).The WaitForCompletionOrCreateCheckStatusResponseAsync (.NET) or the waitForCompletionOrCreateCheckStatusResponse (JavaScript) method can be used to get the actual output from an orchestration instance synchronously. По умолчанию эти методы используют значение по умолчанию 10 секунд для timeoutи 1 секунда для retryInterval.By default, these methods use a default value of 10 seconds for timeout, and 1 second for retryInterval.

Ниже приведен пример функции HTTP-триггера, в котором показано, как использовать этот API:Here is an example HTTP-trigger function that demonstrates how to use this API:

// Copyright (c) .NET Foundation. All rights reserved.
// Licensed under the MIT License. See LICENSE in the project root for license information.

using System;
using System.Net.Http;
using System.Threading.Tasks;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Extensions.DurableTask;
using Microsoft.Azure.WebJobs.Extensions.Http;
using Microsoft.Extensions.Logging;

namespace VSSample
{
    public static class HttpSyncStart
    {
        private const string Timeout = "timeout";
        private const string RetryInterval = "retryInterval";

        [FunctionName("HttpSyncStart")]
        public static async Task<HttpResponseMessage> Run(
            [HttpTrigger(AuthorizationLevel.Function, methods: "post", Route = "orchestrators/{functionName}/wait")]
            HttpRequestMessage req,
            [DurableClient] IDurableOrchestrationClient starter,
            string functionName,
            ILogger log)
        {
            // Function input comes from the request content.
            object eventData = await req.Content.ReadAsAsync<object>();
            string instanceId = await starter.StartNewAsync(functionName, eventData);

            log.LogInformation($"Started orchestration with ID = '{instanceId}'.");

            TimeSpan timeout = GetTimeSpan(req, Timeout) ?? TimeSpan.FromSeconds(30);
            TimeSpan retryInterval = GetTimeSpan(req, RetryInterval) ?? TimeSpan.FromSeconds(1);
            
            return await starter.WaitForCompletionOrCreateCheckStatusResponseAsync(
                req,
                instanceId,
                timeout,
                retryInterval);
        }

        private static TimeSpan? GetTimeSpan(HttpRequestMessage request, string queryParameterName)
        {
            string queryParameterStringValue = request.RequestUri.ParseQueryString()[queryParameterName];
            if (string.IsNullOrEmpty(queryParameterStringValue))
            {
                return null;
            }

            return TimeSpan.FromSeconds(double.Parse(queryParameterStringValue));
        }
    }
}

Вызовите функцию с помощью следующей строки.Call the function with the following line. Для интервала повтора используйте 2 секунды в течение времени ожидания и 0,5 секунд.Use 2 seconds for the timeout and 0.5 seconds for the retry interval:

    http POST http://localhost:7071/orchestrators/E1_HelloSequence/wait?timeout=2&retryInterval=0.5

В зависимости от того, сколько времени уйдет на получение ответа от экземпляра оркестрации, возможны два варианта развития событий.Depending on the time required to get the response from the orchestration instance, there are two cases:

  • Экземпляры оркестрации завершены в течение заданного времени ожидания (в данном случае 2 секунды), а ответ является фактическим выходным экземпляром оркестрации, который доставляется синхронно:The orchestration instances complete within the defined timeout (in this case 2 seconds), and the response is the actual orchestration instance output, delivered synchronously:

        HTTP/1.1 200 OK
        Content-Type: application/json; charset=utf-8
        Date: Thu, 14 Dec 2018 06:14:29 GMT
        Transfer-Encoding: chunked
    
        [
            "Hello Tokyo!",
            "Hello Seattle!",
            "Hello London!"
        ]
    
  • Экземпляры оркестрации не могут быть завершены в течение заданного времени ожидания, и ответ по умолчанию описан в разделе обнаружение URL-адреса API HTTP:The orchestration instances can't complete within the defined timeout, and the response is the default one described in HTTP API URL discovery:

        HTTP/1.1 202 Accepted
        Content-Type: application/json; charset=utf-8
        Date: Thu, 14 Dec 2018 06:13:51 GMT
        Location: http://localhost:7071/runtime/webhooks/durabletask/instances/d3b72dddefce4e758d92f4d411567177?taskHub={taskHub}&connection={connection}&code={systemKey}
        Retry-After: 10
        Transfer-Encoding: chunked
    
        {
            "id": "d3b72dddefce4e758d92f4d411567177",
            "sendEventPostUri": "http://localhost:7071/runtime/webhooks/durabletask/instances/d3b72dddefce4e758d92f4d411567177/raiseEvent/{eventName}?taskHub={taskHub}&connection={connection}&code={systemKey}",
            "statusQueryGetUri": "http://localhost:7071/runtime/webhooks/durabletask/instances/d3b72dddefce4e758d92f4d411567177?taskHub={taskHub}&connection={connection}&code={systemKey}",
            "terminatePostUri": "http://localhost:7071/runtime/webhooks/durabletask/instances/d3b72dddefce4e758d92f4d411567177/terminate?reason={text}&taskHub={taskHub}&connection={connection}&code={systemKey}"
        }
    

Примечание

В зависимости от используемой версии узла функций Azure может отличаться формат URL-адресов веб перехватчиков.The format of the webhook URLs might differ, depending on which version of the Azure Functions host you are running. Описанный выше пример предназначен для узла Функций Azure 2.0.The preceding example is for the Azure Functions 2.0 host.

Получение URL-адресов веб-перехватчика управления HTTPRetrieve HTTP management webhook URLs

Внешнюю систему можно использовать для наблюдения или вызова событий в оркестрации.You can use an external system to monitor or to raise events to an orchestration. Внешние системы могут обмениваться данными с Устойчивые функции через URL-адреса перехватчика, которые являются частью ответа по умолчанию, описанного в разделе обнаружение URL-адресов API HTTP.External systems can communicate with Durable Functions through the webhook URLs that are part of the default response described in HTTP API URL discovery. Веб-перехватчики можно также получить программно с помощью привязки клиента оркестрации.The webhook URLs can alternatively be accessed programmatically using the orchestration client binding. С помощью методов CreateHttpManagementPayload (.NET) или createHttpManagementPayload (JavaScript) можно получить сериализуемый объект, который содержит эти URL-адреса перехватчиков.The CreateHttpManagementPayload (.NET) or the createHttpManagementPayload (JavaScript) methods can be used to get a serializable object that contains these webhook URLs.

Методы CreateHttpManagementPayload (.NET) и createHttpManagementPayload (JavaScript) имеют один параметр:The CreateHttpManagementPayload (.NET) and createHttpManagementPayload (JavaScript) methods have one parameter:

  • InstanceId — уникальный идентификатор экземпляра.instanceId: The unique ID of the instance.

Методы возвращают объект со следующими строковыми свойствами:The methods return an object with the following string properties:

  • Id — идентификатор экземпляра оркестрации (будет совпадать с переданным значением InstanceId).Id: The instance ID of the orchestration (should be the same as the InstanceId input).
  • StatusQueryGetUri — URL-адрес состояния экземпляра оркестрации.StatusQueryGetUri: The status URL of the orchestration instance.
  • SendEventPostUri — URL-адрес вызова события экземпляра оркестрации.SendEventPostUri: The "raise event" URL of the orchestration instance.
  • TerminatePostUri — URL-адрес завершения работы экземпляра оркестрации.TerminatePostUri: The "terminate" URL of the orchestration instance.
  • Пуржехисториделетеури: URL-адрес "Очистка журнала" экземпляра оркестрации.PurgeHistoryDeleteUri: The "purge history" URL of the orchestration instance.

Функции могут отсылать экземпляры этих объектов во внешние системы для отслеживания или вызова событий в соответствующих оркестрации, как показано в следующих примерах:Functions can send instances of these objects to external systems to monitor or raise events on the corresponding orchestrations, as shown in the following examples:

[FunctionName("SendInstanceInfo")]
public static void SendInstanceInfo(
    [ActivityTrigger] IDurableActivityContext ctx,
    [DurableClient] IDurableOrchestrationClient client,
    [DocumentDB(
        databaseName: "MonitorDB",
        collectionName: "HttpManagementPayloads",
        ConnectionStringSetting = "CosmosDBConnection")]out dynamic document)
{
    HttpManagementPayload payload = client.CreateHttpManagementPayload(ctx.InstanceId);

    // send the payload to Cosmos DB
    document = new { Payload = payload, id = ctx.InstanceId };
}

Примечание

Предыдущий C# код предназначен для устойчивые функции 2. x.The previous C# code is for Durable Functions 2.x. Для Устойчивые функции 1. x необходимо использовать DurableActivityContext вместо IDurableActivityContext, необходимо использовать атрибут OrchestrationClient вместо атрибута DurableClient, а вместо DurableOrchestrationClient необходимо использовать тип параметра IDurableOrchestrationClient.For Durable Functions 1.x, you must use DurableActivityContext instead of IDurableActivityContext, you must use the 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.

Перемотка экземпляров (Предварительная версия)Rewind instances (preview)

При возникновении сбоя оркестрации в случае непредвиденной причины можно Перемотать экземпляр на предыдущее работоспособное состояние, используя API, созданный для этой цели.If you have an orchestration failure for an unexpected reason, you can rewind the instance to a previously healthy state by using an API built for that purpose.

Примечание

Этот API не является заменой правильной политики повторов и обработки ошибок.This API is not intended to be a replacement for proper error handling and retry policies. Вместо этого его следует применять исключительно в тех случаях, когда причини сбоя экземпляра оркестрации неизвестные.Rather, it is intended to be used only in cases where orchestration instances fail for unexpected reasons. Дополнительные сведения об обработке ошибок и политиках повтора см. в статье об обработке ошибок .For more information on error handling and retry policies, see the Error handling article.

Используйте метод RewindAsync (.NET) или rewind (JavaScript) привязки клиента оркестрации , чтобы перевести согласование обратно в состояние выполнения .Use the RewindAsync (.NET) or rewind (JavaScript) method of the orchestration client binding to put the orchestration back into the Running state. Этот метод также приведет к повторному выполнению действий или сбоев при взаимодействии, которые привели к сбою оркестрации.This method will also rerun the activity or sub-orchestration execution failures that caused the orchestration failure.

Например, предположим, что у вас есть рабочий процесс, включающий серию утверждений человека.For example, let's say you have a workflow involving a series of human approvals. Предположим, что существует ряд функций действий, которые уведомляют пользователей о необходимости их утверждения и ожидают ответа в режиме реального времени.Suppose there are a series of activity functions that notify someone that their approval is needed, and wait out the real-time response. После того как все действия по утверждению получили ответы или истекло время ожидания, предположим, что другое действие завершается сбоем из-за неправильной настройки приложения, например неверной строки подключения к базе данных.After all of the approval activities have received responses or timed out, suppose that another activity fails due to an application misconfiguration, such as an invalid database connection string. Как результат — сбой оркестрации в рабочем процессе.The result is an orchestration failure deep into the workflow. С помощью API RewindAsync (.NET) или rewind (JavaScript) Администратор приложения может исправить ошибку конфигурации и перемотать неудачное согласование обратно в состояние непосредственно перед сбоем.With the RewindAsync (.NET) or rewind (JavaScript) API, an application administrator can fix the configuration error, and rewind the failed orchestration back to the state immediately before the failure. Ни один из действий человека не должен быть утвержден повторно, и теперь согласование можно успешно завершить.None of the human-interaction steps need to be re-approved, and the orchestration can now complete successfully.

Примечание

Функция перемотки назад не поддерживает Перемотка экземпляров оркестрации, использующих устойчивые таймеры.The rewind feature doesn't support rewinding orchestration instances that use durable timers.

[FunctionName("RewindInstance")]
public static Task Run(
    [DurableClient] IDurableOrchestrationClient client,
    [ManualTrigger] string instanceId)
{
    string reason = "Orchestrator failed and needs to be revived.";
    return client.RewindAsync(instanceId, reason);
}

Примечание

Предыдущий 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.

Azure Functions Core ToolsAzure Functions Core Tools

Можно также перемотать экземпляр оркестрации напрямую с помощью команды Azure Functions Core Tools durable rewind.You can also rewind an orchestration instance directly by using the Azure Functions Core Tools durable rewind command. Она принимает следующие параметры.It takes the following parameters:

  • id (обязательно) : идентификатор экземпляра оркестрации.id (required): ID of the orchestration instance.
  • reason (необязательно) : причина перемотки экземпляра оркестрации.reason (optional): Reason for rewinding the orchestration instance.
  • connection-string-setting (необязательный) : имя параметра приложения, содержащего нужную строку подключения к хранилищу.connection-string-setting (optional): Name of the application setting containing the storage connection string to use. Значение по умолчанию — AzureWebJobsStorage.The default is AzureWebJobsStorage.
  • task-hub-name (необязательно) : имя используемого центра задач устойчивые функции.task-hub-name (optional): Name of the Durable Functions task hub to use. По умолчанию используется имя центра задач в файле Host. JSON .By default, the task hub name in the host.json file is used.
func durable rewind --id 0ab8c55a66644d68a3a8b220b12d209c --reason "Orchestrator failed and needs to be revived."

Очистить журнал экземпляровPurge instance history

Чтобы удалить все данные, связанные с согласованием, можно очистить журнал экземпляров.To remove all the data associated with an orchestration, you can purge the instance history. Например, может потребоваться удалить все строки таблицы Azure и большие двоичные объекты сообщений, связанные с завершенным экземпляром.For example, you might want to delete any Azure Table rows and large message blobs associated with a completed instance. Для этого используйте метод PurgeInstanceHistoryAsync (.NET) или purgeInstanceHistory (JavaScript) привязки клиента оркестрации.To do so, use the PurgeInstanceHistoryAsync (.NET) or purgeInstanceHistory (JavaScript) method of the orchestration client binding.

Этот метод имеет две перегрузки.This method has two overloads. Первая перегрузка удаляет журнал по ИДЕНТИФИКАТОРу экземпляра оркестрации:The first overload purges history by the ID of the orchestration instance:

[FunctionName("PurgeInstanceHistory")]
public static Task Run(
    [DurableClient] IDurableOrchestrationClient client,
    [ManualTrigger] string instanceId)
{
    return client.PurgeInstanceHistoryAsync(instanceId);
}

В следующем примере показана функция, активируемая с помощью таймера, которая очищает журнал для всех экземпляров оркестрации, завершенных по истечении указанного интервала времени.The next example shows a timer-triggered function that purges the history for all orchestration instances that completed after the specified time interval. В этом случае он удаляет данные для всех экземпляров, выполненных 30 или более дней назад.In this case, it removes data for all instances completed 30 or more days ago. Оно запускается раз в день, в 00:00:It's scheduled to run once per day, at 12 AM:

[FunctionName("PurgeInstanceHistory")]
public static Task Run(
    [DurableClient] IDurableOrchestrationClient client,
    [TimerTrigger("0 0 12 * * *")]TimerInfo myTimer)
{
    return client.PurgeInstanceHistoryAsync(
        DateTime.MinValue,
        DateTime.UtcNow.AddDays(-30),  
        new List<OrchestrationStatus>
        {
            OrchestrationStatus.Completed
        });
}

Примечание

Предыдущий 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.

Примечание

Чтобы успешно выполнить операцию очистки журнала, состояниесреды выполнения целевого экземпляра должно быть завершено, завершено или завершилось сбоем.For the purge history operation to succeed, the runtime status of the target instance must be Completed, Terminated, or Failed.

Azure Functions Core ToolsAzure Functions Core Tools

Журнал экземпляра оркестрации можно очистить с помощью команды Azure Functions Core Tools durable purge-history.You can purge an orchestration instance's history by using the Azure Functions Core Tools durable purge-history command. Аналогично второму C# примеру в предыдущем разделе, он очищает журнал для всех экземпляров оркестрации, созданных в течение заданного интервала времени.Similar to the second C# example in the preceding section, it purges the history for all orchestration instances created during a specified time interval. Удаленные экземпляры можно фильтровать по состоянию выполнения.You can further filter purged instances by runtime status. Команда имеет несколько параметров:The command has several parameters:

  • created-after (необязательный) : удаление из журнала экземпляров, созданных после этой даты и времени в формате UTC.created-after (optional): Purge the history of instances created after this date/time (UTC). Принимаются значения даты и времени в формате ISO 8601.ISO 8601 formatted datetimes accepted.
  • created-before (необязательный) : удаление из журнала экземпляров, созданных до этой даты и времени в формате UTC.created-before (optional): Purge the history of instances created before this date/time (UTC). Принимаются значения даты и времени в формате ISO 8601.ISO 8601 formatted datetimes accepted.
  • runtime-status (необязательно) : Очистка журнала экземпляров с определенным состоянием (например, "выполняется" или "завершено").runtime-status (optional): Purge the history of instances with a particular status (for example, running or completed). Можно указать несколько состояний (через пробел).Can provide multiple (space separated) statuses.
  • connection-string-setting (необязательный) : имя параметра приложения, содержащего нужную строку подключения к хранилищу.connection-string-setting (optional): Name of the application setting containing the storage connection string to use. Значение по умолчанию — AzureWebJobsStorage.The default is AzureWebJobsStorage.
  • task-hub-name (необязательно) : имя используемого центра задач устойчивые функции.task-hub-name (optional): Name of the Durable Functions task hub to use. По умолчанию используется имя центра задач в файле Host. JSON .By default, the task hub name in the host.json file is used.

Следующая команда удаляет журнал всех неудачных экземпляров, созданных до 14 ноября 2018 в 7:35 по Гринвичу (UTC).The following command deletes the history of all failed instances created before November 14, 2018 at 7:35 PM (UTC).

func durable purge-history --created-before 2018-11-14T19:35:00.0000000Z --runtime-status failed

Удаление центра задачDelete a task hub

С помощью команды Azure Functions Core Tools durable delete-task-hub можно удалить все артефакты хранилища, связанные с определенным центром задач, включая таблицы службы хранилища Azure, очереди и большие двоичные объекты.Using the Azure Functions Core Tools durable delete-task-hub command, you can delete all storage artifacts associated with a particular task hub, including Azure storage tables, queues, and blobs. Команда имеет два параметра:The command has two parameters:

  • connection-string-setting (необязательный) : имя параметра приложения, содержащего нужную строку подключения к хранилищу.connection-string-setting (optional): Name of the application setting containing the storage connection string to use. Значение по умолчанию — AzureWebJobsStorage.The default is AzureWebJobsStorage.
  • task-hub-name (необязательно) : имя используемого центра задач устойчивые функции.task-hub-name (optional): Name of the Durable Functions task hub to use. По умолчанию используется имя центра задач в файле Host. JSON .By default, the task hub name in the host.json file is used.

Следующая команда удаляет все данные службы хранилища Azure, связанные с UserTest концентратором задач.The following command deletes all Azure storage data associated with the UserTest task hub.

func durable delete-task-hub --task-hub-name UserTest

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