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

问题描述 投票:0回答:1

我有一个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();
};
asp.net-core .net-core batch-processing jobs job-scheduling
1个回答
1
投票

你需要一些东西来协调你的工人。您不能只有多个实例抓住同一个池并保持独立,不重复工作。并发将吃你的午餐。相反,应该有一个协调节点将任务分配给其他节点。这是你能解决这个问题的唯一方法。

© www.soinside.com 2019 - 2024. All rights reserved.