基于事件的kafka+调度设计

zrfyljdw  于 2021-06-04  发布在  Kafka
关注(0)|答案(2)|浏览(315)

在使用kafka的基于事件的电子商务系统中,如何处理处于待付款状态的订单的自动过期?
通常,每当客户请求创建新订单时,都会向topic发送一条消息,以便库存服务可以使用和保留客户订单中的项目。订单状态将转换为 pending_payment . 每一个订单 pending_payment 状态,按顺序排列的项目将保留30分钟。我想自动过期的订单和回滚项目的数量在一个可扩展的方式。
我能想到的一种方法是在30分钟内安排一个cron作业,它将使特定订单过期,并将商品的数量放回原处,但是有没有更有效的方法来做到这一点?为每个订单创建cron作业是否可行?

afdcj2ne

afdcj2ne1#

你需要一种方法来管理一个状态-取决于时间。创建cron是可行的,但是很难维护、监视和扩展,尤其是当您需要多个服务器来处理它们时。
另一个解决方案是使用一个简单易用的工作流引擎,比如zenaton(我是联合创始人)。通常,您会为每个订单启动一个用自己的编程语言编写的简单工作流。如果此工作流在30分钟内未收到“paymentevent”,则您决定联系库存服务以释放项目。
使用这样一个工具,也将为您提供很多灵活性,以处理更复杂的情况,例如,如何处理付款后30分钟到达

cczfrluj

cczfrluj2#

Kafka没有延迟队列功能。也没有办法“插入”任何代理端的时间保留(也没有办法保证时间保留处理在您希望的时候发生——将其视为gc)。
所以你的问题的一般答案是你需要某种调度程序。

相关问题