我有以下问题,我在无状态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
),您可以安全地返回该项目作为请求的结果。