如何动态地在Azure Service Fabric上启动长运行服务的多个实例

时间:2017-11-23 20:12:15

标签: azure azure-service-fabric service-fabric-stateful service-fabric-stateless service-factory

我是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;
}

我看过Actor模型,但看起来Actors不适合长时间运行的任务,而且很难启动/停止它们。知道我应该使用什么服务/编程模型吗?

1 个答案:

答案 0 :(得分:0)

考虑在这里使用任务队列。

调用时,气象服务会将任务排入队列以提取天气数据。它还会运行一个无限循环(RunAsync),这个循环会导致并执行任务。

这样,服务调用将快速返回,而工作则在后台执行。

一些鼓舞人心的代码here