【问题标题】:Event Based Kafka + Scheduling Design基于事件的 Kafka + 调度设计
【发布时间】:2019-11-29 17:18:20
【问题描述】:

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

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

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

【问题讨论】:

    标签: apache-kafka kafka-consumer-api spring-kafka kafka-producer-api event-based-programming


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

      kafka 中没有延迟队列功能。 也没有办法“插入”任何代理端的时间保留(也没有办法保证时间保留处理在您想要的时候发生 - 将其视为 GC)。

      所以您的问题的一般答案是您将需要某种调度程序。

      【讨论】:

        猜你喜欢
        • 2021-05-31
        • 1970-01-01
        • 2017-11-05
        • 1970-01-01
        • 1970-01-01
        • 2021-11-20
        • 1970-01-01
        • 1970-01-01
        • 2013-09-28
        相关资源
        最近更新 更多