如何在RavenDB中实现文档的原子并发读取?



我有以下问题,我在无状态REST服务器中实现了一个队列抽象。

假设我有两个REST调用A和B

当调用A发生时,我查询队列中最后一个项目(项目A)并将其交给调用A。

如果调用B与调用A同时被调用-这可能发生在REST调用中,我需要防止程序向调用B提供与A相同的项目,这意味着项目A应该被调用A"锁定"。

一个标准的多线程保护这里将是一个简单的锁,我如何将这个想法转化为我的情况与RavenDB和REST?

p。我使用Nancy作为REST服务器

这应该不会太难,除非我错过了什么:

在项目上引入一个标志(布尔属性),例如:"处理"。在您的操作中,打开一个新的RavenDB会话并在其上启用乐观并发(DocumentSession.Advanced .UseOptimisticConcurrency)。获取下一个未处理的项,然后立即将其已处理标志更新为true。在会话中调用.SaveChanges ->如果成功(您没有获得ConcurrencyException),您可以安全地返回该项目作为请求的结果。

最新更新