我创建了一个计划任务系统。我正在使用具有半个核心的 Windows Azure 辅助角色。我正在从 SQL Azure 数据库中提取任务,并对其进行排队和出队。 任务可以相互独立运行。我估计每个工作角色可以在一小时内执行三十个任务。随着我的解决方案的发展,我担心必须为每 30 个新客户添加一个新的工作人员角色。如果我有超过 1000 个客户,我将拥有大约 35 个 worker 角色项目。
worker 角色是否是满足我的业务需求的错误解决方案?
每个辅助角色项目的代码都是相同的。有没有办法可以在不添加其他项目的情况下执行下面的代码以获得更多辅助角色?
我尝试了并行任务库,但是我的代码无法正常工作。在极少数情况下,客户的订单最终会进入错误的帐户;用户名和密码出现交叉。即使是并行任务,任务数量也会有限制吗?
这是我的代码:
public class WorkerRole : RoleEntryPoint
{
string conString = ConfigurationManager.ConnectionStrings["XXX"].ConnectionString;
IJMATaskProvider m_TaskProvider;
public override void Run()
{
// This is a sample worker implementation. Replace with your logic.
//Trace.TraceInformation("CloudCartConnector.TaskRole entry point called", "Information");
while (true)
{
Thread.Sleep(30010);
ExecuteTasks();
Thread.Sleep(500010);
Trace.TraceInformation("Working", "Information");
}
}
public override bool OnStart()
{
ServicePointManager.DefaultConnectionLimit = 12;
m_TaskProvider = JMATaskFactory.Get(conString, CloudCartConnectorLogProvider.Instance);
return base.OnStart();
}
void PerformTask(JMATask task)
{
//Update database
}
public string ExecuteTasks()
{
try
{
List<JMATask> tasks = m_TaskProvider.GetAllTasks();
foreach (JMATask task in tasks)
{
PerformTask(task);
}
return "OK";
}
catch (Exception ex)
{
}
}
}
最佳答案
Is the worker role the wrong solution for my business requirements?
绝对不是。辅助角色仅用于此目的 - 处理后台任务。
The code for each worker role project is the same. Is there a way I can execute the code below for more worker roles without adding another project?
正如 @Jakub 提到的,您可以有多个相同辅助角色的实例运行处理任务。这里的关键是一项任务仅由一个辅助角色实例处理。
您可以做的一件事是实现某种主/从实现,其中一个工作角色实例将从数据库中获取任务,将它们推送到队列(主)中,然后所有其他工作角色实例(从)将获取来自队列和进程任务的数据。我前段时间写了一篇博文,描述了这种方法,您可能会觉得有用:http://gauravmantri.com/2013/01/23/building-a-simple-task-scheduler-in-windows-azure/ .
关于c# - Azure辅助角色计划任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20842815/