设计概念,以防止重复订单被接收到我的系统中


Design concept to prevent duplicate orders being received into my system

我有一个网络系统,它是我们客户的在线订购门户。我们存储他们的库存,他们通过此门户下订单。

我们对客户参考号进行重复检查,以便同一订单无法通过两次,但是我们遇到了一些问题,即如果客户多次将订单发送到我们的API(在几毫秒内,如果彼此),我们的系统没有足够的时间将订单标记为已收到,因此, 系统允许重复项。

我正试图决定解决这个问题的方法。我不想为此使用数据库约束,因为我发现这是一个应用程序问题而不是数据库问题,并且不相信这是一个好的解决方案。

关于如何解决这个问题的任何设计想法?我想到的一种解决方案是使用带有参考号的互斥锁,这样如果该参考号的互斥锁被锁定,那么它可能会在一秒钟内重试,等等?我的理解是,互斥几乎是万无一失的,因为它们是由文件系统强制执行的?

任何想法将不胜感激

您可以尝试使用随机数策略。这个想法是将随机数设置为隐藏的表单字段并将其存储在会话中。在开机自检时验证 ID。用户必须故意刷新页面以获取新 ID 并能够再次发布。

更新

因此,既然您使用的是API服务,那么我不得不说您可以使用批处理系统。订单进入并存储在保留区的位置。chron 作业贯穿批处理并执行必要的修剪操作。