Как проверить состояние работы и остановить функцию Durable - PullRequest
0 голосов
/ 04 мая 2019

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

  1. Функция Http для запуска функции Orchestrator
  2. Функция Orchestrator enter image description here
  3. Функция активности

enter image description here

Моя DurableFunction запускает и генерирует журналы в Application Insights за последние 5 дней на основе моегокод это займет еще 15 дней.

Я хочу знать, как остановить функцию Orchestrator вручную?

Я вижу тысячи записей в таблице запросов ApplicationInsights для одного выполнения. Есть ли способ проверить, сколько DurableFunction работает в бэкэнде?и сколько времени занимает одно выполнение?

Я могу видеть некоторую информацию о функции оркестратора в таблице «DurableFunctionHubInstance», но MS рекомендует не полагаться на таблицу.

Ответы [ 2 ]

3 голосов
/ 06 мая 2019

Поскольку Durable Functions выполняет множество контрольных точек и воспроизводит оркестровку , обычное ведение журнала не всегда может быть очень проницательным.

Получение статуса

Существует несколько способов.запросить статус оркестровок.Один из них - через Основные функции Azure Core , как упоминал Джордж Чен.

Другой способ запросить статус - напрямую использовать HTTP API Durable Functions:

GET <rooturl>/runtime/webhooks/durableTask/instances?
    taskHub={taskHub}
    &connection={connectionName}
    &code={systemKey}
    &createdTimeFrom={timestamp}
    &createdTimeTo={timestamp}
    &runtimeStatus={runtimeStatus1,runtimeStatus2,...}
    &showInput=[true|false]
    &top={integer}

Больше информации в документах .

В HTTP API также есть методы для очистки оркестровок.Либо один по ID , либо , кратный datetime / status .

DELETE <rooturl>/runtime/webhooks/durabletask/instances/{instanceId}
    ?taskHub={taskHub}
    &connection={connection}
    &code={systemKey}

Наконец, вы также можете управлять своими экземплярами с помощью API DurableOrchestrationClient в C #.Вот пример на GitHub: HttpGetStatusForMany.cs

У меня написано & vlogged об использовании DurableOrchestrationClient API на тот случай, если вы хотитеузнайте больше о том, как использовать это в C #.

Пользовательский статус

Небольшое дополнение: можно добавить пользовательский объект статуса в оркестровку, чтобы вы могли добавить обогащенную информациюо прогрессе оркестровки.

Получение продолжительности

Когда вы запрашиваете состояние экземпляра оркестровки, вы получаете объект DurableOrchestrationStatus.Он содержит два свойства:

  • CreatedTime
  • LastUpdatedTime

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

1 голос
/ 06 мая 2019

Вы можете управлять экземплярами оркестровки Durable Functions с помощью Базовых инструментов функций Azure .

Завершение экземпляров :

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

Запрос экземпляров с фильтрами : вы можете добавить параметр (runtime-status) для фильтрации запущенных экземпляров.

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

Что касается функций временивзял, похоже, не поддерживает.Аналогичным параметром является get-history.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...