我有一个Web应用程序(Asp.net Core 2.0)和一个简单的作业处理器(.NET Core 2.0),如下所示。
我的Web应用程序将向数据库添加作业,处理器将每5分钟获取一次作业并执行一些逻辑操作。
我将处理器封装在docker中,在两台服务器上部署和运行(有两个实例)
任何解决方案,以确保在这里没有重复的工作?我希望两个实例同时处于活动状态。
简单的工作处理器
while (true)
{
Console.WriteLine("Background worker is running");
//Query job from table job
if (DateTime.UtcNow < job.ExpiredAt)
{
//Call external REST API
//Do something
}
Console.WriteLine($"Background worker is delayed for 5 minutes\r\n");
Task.Delay(JobInterval * 60 * 1000).Wait();
};
你需要一些东西来协调你的工人。您不能只有多个实例抓住同一个池并保持独立,不重复工作。并发将吃你的午餐。相反,应该有一个协调节点将任务分配给其他节点。这是你能解决这个问题的唯一方法。