Вызов функции Azure Durable без вызова HttpTrigger (автозапуск) - PullRequest
0 голосов
/ 09 февраля 2019

Я смотрю на этот пример, чтобы запустить долговременную функцию Activity после установленного времени ожидания.

https://docs.microsoft.com/en-us/azure/azure-functions/durable/durable-functions-eternal-orchestrations

Это позволит моей функции Activity выполнять обработку данных, а затем ждать точно1 час, прежде чем он попытается загрузить снова.Это будет продолжаться вечно.Идеальный.

Однако при публикации функции в Azure я не хочу вручную вызывать / запускать функцию через соответствующий HTTP-триггер.Я просто хочу, чтобы долговечная функция автоматически запускалась и начинала обработку.

Возможно ли это?Если нет, то что это за работа?

Спасибо!

1 Ответ

0 голосов
/ 09 февраля 2019

Как обсуждалось в комментариях, один из способов сделать это - добавить новую задачу в ваш конвейер выпуска.

Вот что я понял о вашей настройке из вашего вопроса:

[FunctionName("ClientFunction")]
public static async Task<HttpResponseMessage> OnHttpTriggerAsync([HttpTrigger(AuthorizationLevel.Anonymous, "post")]
            HttpRequestMessage request, [OrchestrationClient] DurableOrchestrationClient starter, ILogger logger)
{
    // Triggers the orchestrator.
    string instanceId = await starter.StartNewAsync("OrchestratorFunction", null);

    return new HttpResponseMessage(HttpStatusCode.OK);
}


[FunctionName("OrchestratorFunction")]
public static async Task DoOrchestrationThingsAsync([OrchestrationTrigger] DurableOrchestrationContext context, ILogger logger)
{
    DateTime deadline = context.CurrentUtcDateTime.Add(TimeSpan.FromHours(1));
    await context.CreateTimer(deadline, CancellationToken.None);

    // Triggers some yout activity.
    await context.CallActivityAsync("ActivityFunction", null);
}

[FunctionName("ActivityFunction")]
public static Task DoAnAwesomeActivity([ActivityTrigger] DurableActivityContext context)
{
}

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

Я предлагаю иметь простой сценарий bash (использующий curl или что-то еще), который будет вызывать ClientFunction по соответствующему URL-адресу.

Bash script

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

...