简单作业处理器的两个实例中没有重复工作

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();
};

你需要一些东西来协调你的工人。您不能只让多个实例在同一个池中抓取并保持分离而不重复工作。并发会吃掉你的午餐。相反,应该有一个协调节点将任务分配给其他节点。这是您处理此问题的唯一方法。