我正在尝试使用多个 VM 实现集中化逻辑。我有一个应用程序在说 5 个虚拟机上运行。只有 1 个 VM 将负责执行一项任务。为此,我正在将该 VM 的主机名写入数据库。但是要将该名称更新到数据库,我必须使用 java 客户端 API 实现锁定,因为可能有 2-3 个 VM 同时出现。如何做到这一点?
更新:我可以使用 findandModify。但我的代码看起来像这样
{
if(collection.getCount({"taskName" :"Task1"}) == 0){
//insert record ------ **I can use findAndModify here**
}
}
但是如果两个虚拟机同时出现,那么两个虚拟机都会进入 if block,因为文档不可用。
我知道 findAndModify 是原子的。因此,在 1 个 VM 发出 findAndModify 命令后,我们将拥有 1 条带有主机名的记录。但是下一个 VM 也将执行相同的操作并使用其主机名再次更新记录。
如果我不清楚我的问题,请告诉我。