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

标签 rest concurrency thread-safety queue ravendb

我遇到以下问题,我正在无状态 REST 服务器中使用 RavenDB 实现队列抽象。

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

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

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

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

P.S我用Nancy对于 REST 服务器

最佳答案

这应该不会太难,除非我错过了一些东西:

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

关于rest - 如何在 RavenDB 中实现文档的原子并发读取?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8705813/

相关文章:

java - jersey2 单元测试,HttpServletRequest 为空

android - 从 Java 到 Kotlin : synchronization and lock/wait/notify pattern

java - 为什么并发练习书中的SafePoint类标记为@ThreadSafe?

java - Rest API 返回 byte[] i 响应

ruby-on-rails - Rails : RESTful Find, 初始化或创建

Azure Synapse Web 事件 'GetFolderByServerRelativeUrl' 未经授权的访问

Go-lang并行段运行速度比串行段慢

java - 多个阻塞队列,单个消费者

Java 线程安全计数器

rust - Rayon 如何防止在线程之间使用 RefCell<T>、Cell<T> 和 Rc<T>?