Java 如果服务在群集模式下运行,则隔离地从数据库读取
我正在做一个调度程序。我使用spring计划每隔2分钟运行一次作业。我扫描数据库以查找挂起的任务并执行它们 如果我的服务只有一个实例,那么这样做很好。我必须部署多个服务实例 我遇到这样的情况:两个实例运行相同的作业,因为每个实例都从数据库中读取相同的作业。它会被执行两次 我使用mongodb来维护作业及其状态。Java 如果服务在群集模式下运行,则隔离地从数据库读取,java,database,mongodb,scheduled-tasks,Java,Database,Mongodb,Scheduled Tasks,我正在做一个调度程序。我使用spring计划每隔2分钟运行一次作业。我扫描数据库以查找挂起的任务并执行它们 如果我的服务只有一个实例,那么这样做很好。我必须部署多个服务实例 我遇到这样的情况:两个实例运行相同的作业,因为每个实例都从数据库中读取相同的作业。它会被执行两次 我使用mongodb来维护作业及其状态。 如何确保所有实例都执行不同的作业?将作业更新为已处理的状态?如果两个服务同时读取相同的记录,则其中一个无法更新该记录,因为另一个已更新该记录?更新不成问题。两个服务一起读取任务并开始执行
如何确保所有实例都执行不同的作业?将作业更新为已处理的状态?如果两个服务同时读取相同的记录,则其中一个无法更新该记录,因为另一个已更新该记录?更新不成问题。两个服务一起读取任务并开始执行。那么这是一个问题更新不是问题,而是解决方案。因为数据库中只能有一个值,所以可以使用它来标记作业已被执行(=第二个作业无法再更新它),或者在那里更新处理程序id。或者其他类似的东西,让你知道该由谁来处理这项工作。