我有一个网络系统,我建立了,这是一个为我们的客户在线订购门户。我们存储他们的库存,他们通过这个门户下订单。
我们对客户参考号进行重复检查,以便同一订单不能两次发送,但是我们遇到了一些问题,如果客户多次将订单发送到我们的API (如果在毫秒内,如果是这样的话),我们的系统没有足够的时间将订单标记为已收到,因此,系统允许重复。
我正在努力决定解决这个问题的方法。我不想对此使用数据库约束,因为我发现这是一个应用程序问题,而不是数据库问题,并且我认为这不是一个好的解决方案。
有没有关于如何解决这个问题的设计想法?我想到的一个解决方案是使用一个带有参考号的互斥锁,这样如果一个互斥锁被锁定,那么它可能会在一秒钟内重试,依此类推。我的理解是,互斥几乎是愚蠢的,因为它们是由文件系统强制执行的?
任何想法都将不胜感激
发布于 2016-02-18 22:29:56
您可以尝试使用nonce策略。其想法是将随机数设置为隐藏的表单字段,并将其存储在会话中。开机自检时验证id。用户必须故意刷新页面以获得新的id并能够第二次发布。
更新
因此,既然您使用的是API服务,那么我不得不说您可以使用批处理系统。订单进入并存储在等待区。chron作业在批处理中运行,并执行必要的修剪操作。
https://stackoverflow.com/questions/35493293
复制相似问题