防止同时访问具有相同参数的方法的最佳做法?

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

我有一个/cancel_reservation端点,该端点带有一个ReservationId并需要认证。在这种方法内,预订被取消并退款。现在,如果同一用户同时调用此方法两次,则可能会发生争用情况,并且可以退款两次。

目前,我通过使static Set包含锁定的保留ID来解决了此问题,该方法首先检查了保留ID是否未锁定。但是我认为有更好的方法来解决这个问题?

编辑:保留保存在Couchbase上,但我不希望使用db乐观/悲观锁定来使db独立。同样,我怀疑乐观锁定是否会在这种情况下有所帮助。

也该方法的流程如下:

获取预订⮞定期检查with通过第三方服务取消预订⮞退款给用户⮞更新预订状态+其他数据⮞坚持预订

java spring-boot couchbase
1个回答
0
投票

尽管让您的应用程序保持“与数据库无关”是一件好事,但在这种情况下,我个人还是会退回到CB乐观/悲观锁定中。如果您真的想在应用程序端解决它,则同步块可能是一个简单的解决方法*:

publis Result cancelReservation(String refundId) {
    synchronized (refundId) {
        //do something
    }
}

*我假设您没有使用反应性弹簧储存库。

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