这是一个基于Java的后端系统。首先让我解释一下现有的系统:
订单处理器系统使用队列中的订单。当订单到达时,调用支付系统,其首先基于item_id获取对项目行的锁定。 如果队列中有1000个订单,订单处理器将消耗它们并继续调用支付处理器。
请注意,订单处理器和支付处理器是通过Web服务进行通信的独立系统。
如果支付处理器对同一个项目有多个订单,则处理将失败并出现LockAcquisition错误,该错误会传播到订单处理器,然后将失败的订单重新发送到支付处理器。订单可在未来24至48小时内在任何地方重试。
现在我必须改进这个逻辑。我必须找出具有相同项目ID的订单如何顺序处理(在发布锁定时调用paymentProcessor)。
订单处理器可能正在处理1000个项目,并且多个线程正在执行处理。我知道每个订单的商品ID。我最近转向后端开发,我认为我需要专家的见解,知道如何以最佳方式完成。任何指针都将非常感激。
提前致谢!!
答案 0 :(得分:1)
如果不完全理解架构,很难提出好的建议。以牺牲一些效率为代价来解决问题的一种策略是基于特定的调度策略将命令分派给特定的线程,例如,如果您有10个线程,您可以将订单ID(或订单ID的哈希值)取模100并发送到该线程编号。
你会发现你的线程有些未充分利用,因为分发不会完全均匀,但这应该可以解决问题。
如果你走这条路,请注意正确处理创建/终止/崩溃处理线程。