Как динамически запускать несколько экземпляров долго работающей службы в Azure Service Fabric

Я очень новичок в Azure Service Fabric.

Мой сценарий состоит в том, что у меня есть долгосрочный сервис, который мне нужен для динамического запуска / остановки нескольких экземпляров, и запуск должен быть неблокированным. Каждый экземпляр будет обрабатывать 1 запись данных независимо. Например:

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

var weatherSvcList = new List...
var currentCities = [];
while (true) 
{
    var newCities = FetchCities();

    var addedCities = newCities.Except(currentCities);
    weatherSvcList  = LaunchSvc(addedCities); // launch and return, non-blocking

    var removedCities = currentCities.Except(newCities);
    weatherSvcList  = StopSvc(removedCities);

    weatherSvcList  = RelaunchErrorSvc(cities);

    currentCities = newCities;
}

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

1 ответ

Рассмотрите возможность использования очереди задач здесь.

При вызове метеослужба ставит задачу в очередь для получения данных о погоде. Это также будет запускать бесконечный цикл (RunAsync), этот цикл удаляет очереди и выполняет задачи.

Таким образом, сервисные вызовы будут быстро возвращаться, пока работа выполняется в фоновом режиме.

Некоторый код для вдохновляющих целей здесь.