Могут ли долгосрочные функции иметь несколько триггеров? - PullRequest
0 голосов
/ 14 февраля 2019

У меня есть долговременная функция, которая запускается один раз в день по триггеру таймера:

[FunctionName("MyDurableFunction")]
public static async Task Run(
    [TimerTrigger("0 0 23 * * *", RunOnStartup = false)] TimerInfo myTimer,
    [OrchestrationClient] DurableOrchestrationClient starter,
    ILogger log)
{
    await starter.StartNewAsync("OrchestrationFunction", null);
}

[FunctionName("OrchestrationFunction")]
public static async Task OrchestrationFunction(
    [OrchestrationTrigger]DurableOrchestrationContext context,
    ILogger log)
{
    // do stuff
}

Это прекрасно работает.В целях тестирования я также хотел бы иметь возможность запускать долговременную функцию через Http Trigger, поэтому я добавил это:

[FunctionName("MyDurableFunctionHttpTrigger")]
public static async Task<IActionResult> Run(
    [HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = "demo")]HttpRequest req, 
    [OrchestrationClient] DurableOrchestrationClient starter, 
    ILogger log)
{
    await starter.StartNewAsync("OrchestrationFunction", null);
    return new OkObjectResult("blah");
}

Запуск этих локально, включая либо HTTP-триггер, либо таймер-триггер вызоветФункция, но включение обоих в класс означает, что ни одно из событий триггера не произойдет.Можно ли иметь несколько типов триггеров для запуска триггера оркестровки?

1 Ответ

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

Я полагаю, что вы можете иметь только один тип триггера для каждой функции, но могу предложить вам записать всю свою логику в отдельный проект / сборку, а затем просто ссылаться на сборку и вызывать точку входа через параметры, сохраняя реализацию вашей функции чистой и простойи централизацию логики выполнения в другом проекте (или классах в том же проекте).

В вашем коде должны быть функции Orchestrator и Activity, чтобы вы могли написать одну функцию Activity для выполнения работы и вызывать ее издва оркестратора.Руководство по долговременным функциям состоит в том, чтобы поддерживать оркестратор в чистоте и просто управлять им - оркестровкой, перекладывая работу на Действия.

Я рекомендую вам взглянуть на шаблон долговечного монитора для вашего требования, основанного на таймере, и взглянуть на HTTP API для HTTP-триггеров.

...