2

在使用 kafka 的基于事件的电子商务系统中,您如何处理处于 pending_payment 状态的订单自动过期?

通常,每当客户请求创建新订单时,都会向主题发送一条消息,以便库存服务可以消耗和保留客户订单的物品。订单的状态将转换为pending_payment。对于pending_payment状态中的每个订单,订单中的项目将保留 30 分钟。我想自动使订单过期并以可扩展的方式回滚商品的数量。

我能想到的一种方法是在 30 分钟内安排一个 cron 作业,该作业将使特定订单过期并放回物品的数量,但有没有更有效的方法来做到这一点?为每个订单创建一个 cron 作业是否可行?

4

2 回答 2

1

kafka 中没有延迟队列功能。也没有办法“插入”任何代理端的时间保留(也没有办法保证时间保留处理在你想要的时候发生——把它想象成 GC)。

因此,您的问题的一般答案是您将需要某种调度程序。

于 2019-07-22T21:03:00.253 回答
0

您需要一种管理状态的方法 - 取决于时间。创建一个 cron 是可行的,但可能很难维护、监控和扩展,尤其是当您需要多个服务器来处理它们时。

另一种解决方案是使用简单易用的工作流引擎,例如zenaton(我是联合创始人)。通常,您会为每个订单启动一个用您自己的编程语言编写的简单工作流程。如果此工作流在 30 分钟内未收到“PaymentEvent”,您决定联系库存服务以释放项目。

使用这样的工具,还将为您提供很大的灵活性来处理更复杂的情况,例如。如果付款在 30 分钟后到达怎么办

于 2019-08-27T13:55:39.040 回答