我是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不适合长时间运行的任务,而且很难启动/停止它们。知道我应该使用什么服务/编程模型吗?
答案 0 :(得分:0)
考虑在这里使用任务队列。
调用时,气象服务会将任务排入队列以提取天气数据。它还会运行一个无限循环(RunAsync
),这个循环会导致并执行任务。
这样,服务调用将快速返回,而工作则在后台执行。
一些鼓舞人心的代码here。