我是Azure服务结构的新手。
我的情况是,我有一项长期运行的服务,需要动态启动/停止多个实例,并且该启动应该是非块。每个实例将独立处理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;
}
我已经研究了演员模型,但似乎演员不适合长期运行的任务,而且很难开始/阻止他们。知道我应该使用哪种服务/编程模型?
请在此处考虑使用任务队列。
被调用时,气象服务将使启动天气数据的任务。它还将运行一个无限循环(RunAsync
),此循环删除并执行任务。
这样,服务调用将在后台执行时迅速返回。
在此处出于启发性目的的一些代码。