Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何实现顺序处理_Java - Fatal编程技术网

Java 如何实现顺序处理

Java 如何实现顺序处理,java,Java,这是一个基于java的后端系统。首先让我解释一下现行制度: 有一个订单处理系统,它使用队列中的订单。当订单到达时,将调用支付系统,该系统首先根据项目id获取项目行的锁。 如果队列中有1000个订单,订单处理程序将使用这些订单并继续调用支付处理程序 请注意,订单处理程序和支付处理程序是通过web服务进行通信的独立系统 如果支付处理程序对同一项目有多个订单,则处理将失败,并出现锁获取错误,该错误也会传播到订单处理程序,该程序随后会将失败的订单重新发送给支付处理程序。订单可在未来24至48小时内的任何

这是一个基于java的后端系统。首先让我解释一下现行制度:

有一个订单处理系统,它使用队列中的订单。当订单到达时,将调用支付系统,该系统首先根据项目id获取项目行的锁。 如果队列中有1000个订单,订单处理程序将使用这些订单并继续调用支付处理程序

请注意,订单处理程序和支付处理程序是通过web服务进行通信的独立系统

如果支付处理程序对同一项目有多个订单,则处理将失败,并出现锁获取错误,该错误也会传播到订单处理程序,该程序随后会将失败的订单重新发送给支付处理程序。订单可在未来24至48小时内的任何地方重试

现在我必须改进这个逻辑。我必须弄清楚,对于具有相同商品id的订单,如何按顺序进行此处理(释放锁时,请致电paymentProcessor)

订单处理器可能正在处理1000个项目,多个线程正在执行该处理。我知道每个订单的商品id。我最近转向了后端开发,我想我需要专家的洞察力来了解如何以最好的方式完成。任何指点都将不胜感激


提前谢谢

如果不完全理解体系结构,就很难给出好的建议。以牺牲某些效率为代价解决问题的一种策略是基于特定的调度策略将订单调度到特定的线程,例如,如果您有10个线程,则可以将订单ID(或订单ID的哈希)取模100并调度到该线程号

您会发现线程的利用率有点低,因为分布不完全均匀,但这应该可以解决问题

如果您这样做,请注意正确处理处理线程的创建/终止/崩溃