如何在使用spring scheduler时使用couchbase锁定文档

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

我们有一个微服务,它有一个接收请求的端点,在couchbase中创建一个文件并返回OK。该文档稍后由弹簧调度程序处理。

我们正在使用docker来部署微服务。现在,如果我们运行了多个应用程序实例,那么我们就会遇到一个问题,即每个实例将读取并处理不需要的同一文档。一次只有一个实例应该处理文档。

  1. 我们首先考虑使用'is-scheduled'标志和乐观锁定来避免其他实例处理它,但是,如果某个已经读取并设置了标志崩溃的实例,我们将永远保留is-scheduled为真的文档,它们将永远不会被拿起来处理。
  2. 我们还想过使用悲观锁定,但是基座sdk只允许锁定30秒。我们无法保证在30秒内完成处理。
  3. 我们想过创建一个具有相似id但带有TTL的不同前缀的文档。在获取文档进行处理之前,我们将尝试获取此文档(这是一种锁,一种)。如果文档可用,则意味着我们可以跳过文档处理。即使应用程序崩溃,此锁也将过期,文档可以在以后处理。到目前为止,我们还未发现此解决方案存在任何问题。

问题:

  1. 对于第二点,他们是在沙发基地的一种方式,我们可以锁定文件超过30秒,比如4小时或更长时间。
  2. 他们在第3个解决方案中是否错过了任何角落案例
  3. 或者他们是解决这个问题的更好方法?

更新:我们继续推进第3个解决方案。它的实现非常简单,似乎可以满足我们所知道的所有情况。

spring-data couchbase spring-scheduled
1个回答
1
投票

您可以将文档预先指定给特定的后端处理器。创建每个文档时,向其添加一个字段,说明应由哪个处理器负责。

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