Redis Streams Avansat: Grupuri de Consumatori (XREADGROUP, XACK, XCLAIM și XAUTOCLAIM) în Redis & In-Memory Data Store

Mesagerie & Evenimente Standard Redis

Ghid complet pentru grupuri de consumatori în Redis Streams: procesarea distribuită a cozilor de mesaje, mecanismul Pending Entries List (PEL), reatribuirea automată a mesajelor blocate cu XAUTOCLAIM și confirmarea cu XACK.

Sintaxă comandă
XGROUP CREATE stream grup $ | XREADGROUP GROUP grup worker COUNT 10 STREAMS stream > | XAUTOCLAIM

Redis Streams reprezintă o structură de date de tip jurnal distribuit append-only (similară cu Apache Kafka), oferind persistență, ordonare strictă pe bază de ID temporal și suport nativ pentru Grupuri de Consumatori (Consumer Groups).

Spre deosebire de Pub/Sub tradițional (care este efemer și pierde mesajele dacă niciun abonat nu este conectat), grupurile de consumatori garantează livrarea: mesajele sunt distribuite între mai mulți lucrători (workers), fiecare consumator primește evenimente unice, iar starea de prelucrare este urmărită prin lista de mesaje în așteptare (PEL – Pending Entries List).

Flux de Producție: Creare Grup, Consum și Reatribuire Automată
# 1. Creăm grupul de consumatori 'comenzi_group' pe fluxul 'comenzi_stream':
# Simbolul '$' indică procesarea doar a mesajelor noi care sosesc după crearea grupului
XGROUP CREATE comenzi_stream comenzi_group $ MKSTREAM

# 2. Publicarea unui eveniment nou în stream de către un serviciu producător:
XADD comenzi_stream * utilizator_id 1042 total 249.99 status "creat"
# Răspuns: "1729789200000-0" (ID compus din timestamp în milisecunde și număr de secvență)

# 3. Lucrătorul 'worker-1' citește până la 5 mesaje neprocesate din grup:
# Simbolul '>' indică preluarea exclusivă a mesajelor noi neatribuite încă nimănui!
XREADGROUP GROUP comenzi_group worker-1 COUNT 5 BLOCK 2000 STREAMS comenzi_stream >

# 4. Confirmarea procesării cu succes (elimină mesajul din PEL):
XACK comenzi_stream comenzi_group 1729789200000-0

# 5. Tratarea căderilor: Dacă un worker cade înainte de XACK, mesajul devine orfan în PEL.
# Redis 6.2+ introduce XAUTOCLAIM pentru a transfera automat mesajele inactive de peste 60.000 ms:
XAUTOCLAIM comenzi_stream comenzi_group worker-2 60000 0-0 COUNT 10

Diferența dintre Mesajele Noi (>) și Reîncercarea Mesajelor din PEL

Parametru ID în XREADGROUP Ce mesaje returnează Redis? Scenariu optim de utilizare
> Mesaje complet noi, care nu au fost livrate niciodată vreunui membru din grup. Procesare normală în regim continuu de producție.
0 sau ID specific Mesaje din lista PEL atribuite lucrătorului curent dar încă neconfirmate prin XACK. Procedură de recuperare (crash recovery) la repornirea unui worker.