簡體   English   中英

基於事件的Kafka+調度設計

[英]Event Based Kafka + Scheduling Design

在使用 kafka 的基於事件的電子商務系統中,您如何處理處於 pending_payment 狀態的訂單自動過期?

通常,每當客戶請求創建新訂單時,都會向主題發送一條消息,以便庫存服務可以使用和保留客戶訂單的商品。 訂單的狀態將轉換為pending_payment 對於每個處於pending_payment狀態的訂單,訂單中的商品將保留30 分鍾。 我想自動過期訂單並以可擴展的方式回滾項目的數量。

我能想到的一種方法是在 30 分鍾內安排一個 cron 作業,該作業將使特定訂單到期並放回項目的數量,但有沒有更有效的方法來做到這一點? 為每個訂單創建一個 cron 作業是一種可行的方法嗎?

kafka 中沒有延遲隊列功能。 也沒有辦法“插入”任何代理端的時間保留(也沒有辦法保證時間保留處理在你想要的時候發生——把它想象成 GC)。

所以你的問題的一般答案是你將需要某種調度程序。

您需要一種管理狀態的方法 - 取決於時間。 創建一個 cron 是可行的,但可能難以維護、監控和擴展,尤其是當您需要多個服務器來處理它們時。

另一種解決方案是使用簡單易用的工作流引擎,例如zenaton (我是聯合創始人)。 通常,您將為每個訂單啟動一個用您自己的編程語言編寫的簡單工作流程。 如果此工作流在 30 分鍾內未收到“PaymentEvent”,您決定聯系庫存服務以釋放項目。

使用這樣的工具,將為您提供很大的靈活性來處理更復雜的情況,例如。 如果付款在 30 分鍾后到達怎么辦

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM