XACK / XPENDING în Redis & In-Memory Data Store

XACK confirmă că un mesaj din grup a fost procesat; XPENDING arată mesajele livrate, dar încă neconfirmate.

Sintaxă comandă
XACK key group id [id ...]
XPENDING key group [[IDLE min-idle-time] start end count [consumer]]

Ce face XACK / XPENDING

După ce un consumator termină de procesat un mesaj primit cu XREADGROUP, trimite XACK cu ID-ul lui. Mesajul este scos din lista de așteptare (PEL) a grupului și nu va mai fi livrat din nou.

XPENDING fără alte argumente dă un rezumat: numărul de mesaje neconfirmate, cel mai mic și cel mai mare ID și câte are fiecare consumator. Forma extinsă (start end count) listează mesajele, cu timpul de când așteaptă și de câte ori au fost livrate.

Parametri

Parametru Descriere
key group Stream-ul și grupul.
id ... ID-urile mesajelor confirmate (XACK).
IDLE min-idle-time Doar mesajele neconfirmate de cel puțin atâtea milisecunde (Redis 6.2+).
start end count [consumer] Forma extinsă a XPENDING.

Ce returnează

XACK: numărul de mesaje confirmate (cele deja confirmate nu se numără). XPENDING: rezumatul sau lista mesajelor în așteptare.

Exemple

Exemplul 1: Confirmarea unei comenzi procesate

Al doilea XACK pe același ID întoarce 0, pentru că mesajul fusese deja confirmat.

XACK comenzi facturare 1792915200000-0
XACK comenzi facturare 1792915200000-0

Ieșire în redis-cli

127.0.0.1:6379> XACK comenzi facturare 1792915200000-0
(integer) 1
127.0.0.1:6379> XACK comenzi facturare 1792915200000-0
(integer) 0

Exemplul 2: Ce mesaje au rămas neconfirmate

A rămas un mesaj, la worker2.

XPENDING comenzi facturare

Ieșire în redis-cli

127.0.0.1:6379> XPENDING comenzi facturare
1) (integer) 1
2) "1792915260000-0"
3) "1792915260000-0"
4) 1) 1) "worker2"
      2) "1"

Greșeli frecvente

  • XACK nu șterge mesajul din stream, doar îl scoate din PEL. Stream-ul se curăță cu MAXLEN, MINID sau XTRIM.
  • Confirmă abia după ce procesarea a reușit; dacă confirmi înainte și workerul cade, mesajul se pierde.

Comenzi înrudite

  • XREADGROUP: Citește mesaje dintr-un stream ca membru al unui grup de consumatori; fiecare mesaj ajunge la un singur consumator.
  • XGROUP CREATE: Creează un grup de consumatori pe un stream, astfel încât mai mulți workeri să-și împartă mesajele.
  • XADD: Adaugă un eveniment (o intrare cu câmpuri și valori) la finalul unui stream Redis și întoarce ID-ul lui.