Как динамически запускать несколько экземпляров долго работающей службы в 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
), этот цикл удаляет очереди и выполняет задачи.
Таким образом, сервисные вызовы будут быстро возвращаться, пока работа выполняется в фоновом режиме.
Некоторый код для вдохновляющих целей здесь.