核心資料背景作業

工作佇列

先進先出的佇列,工作者當機時也不會遺失工作,生產者與消費者平行運行。

實測的管線化 LPUSH/s
31.6M
個因當機而遺失的工作
0
次輪詢
0
步驟 1 / 5
生產者推入工作

任何服務都能新增工作,不必等待消費者。

範例工作階段playing
# 生產者推入工作
hotkv> LPUSH queue:emails "{\"to\":\"ada@example.com\",\"tpl\":\"welcome\"}"
(integer) 18

以真實 HotKV 指令與範例回覆呈現的動畫導覽。點擊任一步驟即可跳到該步驟。 指令與回覆維持英文,與您在 HotKV 中輸入及看到的完全一致。

問題

寄送電子郵件、圖片縮放與 webhook 等背景工作,在建立工作的程式碼與執行工作的程式碼之間,需要一個佇列。一個在工作者於任務途中當機時會遺失工作的佇列,比沒有佇列更糟,因為沒有人會發現工作不見了。

HotKV 如何處理

清單提供了簡單的先進先出佇列。BLMOVE 在把每個工作交給工作者的同時,將它移到處理中清單,因此即使工作者消失,進行中的工作也一定還存放在某處。生產者與消費者由平行的工作執行緒處理。

逐步說明

逐個指令看看發生了什麼事

  1. 01

    生產者推入工作

    任何服務都能新增工作,不必等待消費者。

    LPUSH queue:emails "{\"to\":\"ada@example.com\",\"tpl\":\"welcome\"}"
  2. 02

    工作者安全地認領工作

    BLMOVE 會阻塞到有工作為止,然後一步將它移到處理中清單。

    BLMOVE queue:emails queue:emails:processing RIGHT LEFT 0
  3. 03

    完成時確認

    電子郵件已寄出。工作從處理中清單移除。

    LREM queue:emails:processing 1 "{\"to\":\"ada@example.com\",\"tpl\":\"welcome\"}"
  4. 04

    工作者當機

    工作者 2 在工作途中停止運作。它的工作仍在處理中清單裡,沒有遺失。

    LRANGE queue:emails:processing 0 -1
  5. 05

    重新排入佇列並繼續

    監控程式把被遺棄的工作移回佇列,由另一個工作者接手。

    LMOVE queue:emails:processing queue:emails LEFT RIGHT
適用之處

真實世界的情境

交易類電子郵件與簡訊

註冊、收據與重設訊息由網頁應用程式排入佇列,再由一組工作者寄出。

媒體處理

上傳的檔案排隊等待產生縮圖與轉碼,轉碼器當機也不會漏掉任何檔案。

Webhook 傳送

對外的 webhook 被排入佇列並重試,不會阻塞觸發它們的請求。

內建

您能獲得什麼

具阻塞讀取的先進先出

LPUSH 搭配 BRPOP,工作者在有工作到來之前會休眠。

LPUSHBRPOP

不遺失工作

BLMOVE 以原子方式將每個工作交給處理中清單。

BLMOVELREM

平行的生產者與消費者

生產者與消費者由平行的工作執行緒處理。

需要更多嗎?

若需要確認機制、消費者群組與重播,請使用串流。

XADDXREADGROUP

常見問題

工作者當機時,工作會怎麼樣?

如果您用 BLMOVE 認領工作,工作會留在處理中清單。監控程式可以把停留太久的項目移回佇列。

工作者必須輪詢嗎?

不需要。BRPOP 與 BLMOVE 會阻塞到工作到來為止,並可選擇設定逾時。

該用清單還是串流?

清單是最簡單的佇列。串流則加入消費者群組、逐訊息確認與歷史記錄。請參閱事件串流使用情境。

相關使用情境

在您自己的工作負載上試試看

HotKV 支援 Redis 協定,因此您可以將現有的用戶端指向它,並執行這些相同的指令。