Очередь задач Service Fabric с задачей завершения

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

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

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

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

2 ответа

Решение

Вы также можете использовать ServiceFabric Actors для вашего требования.

  • Создайте центральный "JobService", который запускается для выполнения работы (например, служба без сохранения состояния, на которой размещается WebApi)
  • Создайте "TaskActor", который будет обрабатывать одну задачу
    • Опубликуйте отмену подписи в ActorInterface
  • В вашем "JobService" присвойте каждой задаче уникальный идентификатор и используйте его в качестве "ActorId"
  • В вашем "JobService" подождите, пока актеры завершат выполнение задач, и инициируйте очистку, как только все будут завершены. Вы также можете отменить других актеров, если один из них выбрасывает исключение.

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

https://docs.microsoft.com/en-us/azure/service-fabric/service-fabric-reliable-actors-platform

В зависимости от вашего сценария, actorIds могут быть согласованными (например, taskActor1, taskActor2) для повторного использования ресурсов, или вы можете использовать guid, чтобы сделать их уникальными для каждой работы.

Рассмотрите возможность использования подхода, управляемого событиями (или pub / sub) для этого.

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

Аналогичным образом, события могут содержать информацию о прогрессе, сбоях и отмене.

Другие вопросы по тегам