【发布时间】:2022-01-14 04:35:46
【问题描述】:
1. cron job started
2. create Entity1 and save to DB
3. Fetch transactionEntity from DB
4. using transactions as transactionIds.
for (Transaction id : transactionIds) {
a. create Entity2 and save to db
b. fetch paymentEntity from DB.
c. response = post request Rest API call
d. udpate Entity2 with response
}
5. udpate Entity1.
问题陈述 - 我使用需要按上面给出的处理的 cron 作业从 transactionIds 中的 db 获得 5000 多个事务。使用上述方法,而我的上一个循环正在进行,接下来 5000 多个事务进入循环,因为 cron 作业在 2 分钟内运行。 我已经检查了多个解决方案(.parallelStream() with ForkJoinPool / ListenableFuture,但我无法确定哪个是扩展上述代码的最佳解决方案。我可以为此使用弹簧批处理,如果是,如何做到这一点?步骤是什么来自上述步骤的 reader、process 和 writer。
【问题讨论】:
-
与其尝试在 2 分钟内处理 5000 笔交易,不如更改设计,以防万一您开始收到 10000 笔交易,您的系统仍会处理它们。更好的解决方案可能是将所有 transactionId 保存在某种队列中并继续从队列和进程中读取。 Cron 作业会不断将 transactionIds 添加到此队列中。
-
@Smile - 队列的所有选项是什么,因为该服务在多个 pod 上运行。实际上,这些都是钱包失败的交易。需要尽早处理。
-
你可以看看kafka,或者如果你在云上部署,云提供商有他们自己的植入物,比如AWS SQS等
-
只需要使用java解决没有其他选择。
标签: java java-8 forkjoinpool