Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring 相同微服务的多个实例不应获取和更新相同的MongoDB文档_Spring_Mongodb_Transactions_Microservices - Fatal编程技术网

Spring 相同微服务的多个实例不应获取和更新相同的MongoDB文档

Spring 相同微服务的多个实例不应获取和更新相同的MongoDB文档,spring,mongodb,transactions,microservices,Spring,Mongodb,Transactions,Microservices,问题陈述: 我们的微服务中有一个调度器,它将获取10个请求文档,然后开始处理它们,然后更新每个文档的状态 我们计划部署同一微服务的三个实例。一旦所有三个实例开始执行调度器,那么每个实例将获取10个请求文档并开始处理它们 不应在多个实例中获取和处理相同的请求文档。如何确保microservice的每个实例选择10个不同的文档?您的每个工作人员都应该选择一组不同的文档 例如,如果您的文档具有自动递增的数字标识: 工作者1可以获取ID%3=0的所有文档 工作者2可以获取ID%3=1的所有文档 工作者3

问题陈述:

我们的微服务中有一个调度器,它将获取10个请求文档,然后开始处理它们,然后更新每个文档的状态

我们计划部署同一微服务的三个实例。一旦所有三个实例开始执行调度器,那么每个实例将获取10个请求文档并开始处理它们


不应在多个实例中获取和处理相同的请求文档。如何确保microservice的每个实例选择10个不同的文档?

您的每个工作人员都应该选择一组不同的文档

例如,如果您的文档具有自动递增的数字标识:

工作者1可以获取ID%3=0的所有文档 工作者2可以获取ID%3=1的所有文档 工作者3可以获取ID%3=2的所有文档
如果autoincrement ID不可用,您可以查看一致散列,这非常好学

哈希很简单:

计算文档ID的哈希值 使用此哈希可获取应处理此文档的工作人员 这种方法的问题是,假设您的文档ID散列的范围在1到1000之间,并且您使用的是上述相同的方法。您可能最终会遇到工人1比工人2得到更多的工作


使用一致散列,可以扩展范围以获得更平衡的结果。

自动增量ID不可用。你能为一致的散列提供一些好的参考吗?我已经编辑了回复。我建议您从简单的散列开始。只需散列文档ID,然后使用我给您的模示例。如果您想执行额外的步骤,可以使用一致散列。它在互联网上随处可见。感谢您提出的解决方案,这很好,但在我的场景中,我们没有数字ID。我期待一些与MongoDB事务相关的解决方案。获取条件将是唯一的请求状态。