小電商的延時隊列設計概要

基於Redis實現的延遲隊列

應用場景

  • 未支付訂單定時取消關閉
  • 檢測退款的訂單的第三方退款狀態
  • 餘額支付回調(通知機率=2n+n)
  • 訂單15天后自動評價
  • ......

設計實現

傳統實現

  • 使用redis的特性實現,對普通的傳統掃表優化

設計目標

  • 可靠性:延遲隊列保證被消費一次

系統結構及實現要點

  • job(json{uuid,job_id,job_name,job_data})redis

    • 關閉未支付的訂單
    • 檢測第三方退款狀態
    • 餘額支付回調
  • 延遲隊列(redis的zset)json

    1. 結構:score:過時時間戳;value:job_id
    2. 輪詢延遲隊列,將分發到各個消息隊列優化

      1. value = zrangebyscore(key, 0,now_time, start=0, num=1)
      2. 若是value空值,則sleep(1)
      3. 若是value非空,則取出value,result = zrem(key, value)ui

        1. 若是result爲真,則rpush相關的隊列
  • 執行消息隊列(reidis的list)設計

    • 關閉未支付的訂單
    • 檢測第三方退款狀態
    • 餘額支付回調
相關文章
相關標籤/搜索