简单作业处理器的两个实例中没有重复工作
No duplication work in two instance of simple job processor
我有一个 Web 应用程序 (Asp.net Core 2.0) 和一个简单的作业处理器 (.NET Core 2.0),如下所示。
我的网络应用程序将向数据库添加作业,处理器将每 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();
};
你需要一些东西来协调你的工人。您不能只让多个实例在同一个池中抓取并保持分离而不重复工作。并发会吃掉你的午餐。相反,应该有一个协调节点将任务分配给其他节点。这是您处理此问题的唯一方法。
我有一个 Web 应用程序 (Asp.net Core 2.0) 和一个简单的作业处理器 (.NET Core 2.0),如下所示。
我的网络应用程序将向数据库添加作业,处理器将每 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();
};
你需要一些东西来协调你的工人。您不能只让多个实例在同一个池中抓取并保持分离而不重复工作。并发会吃掉你的午餐。相反,应该有一个协调节点将任务分配给其他节点。这是您处理此问题的唯一方法。