XREADGROUP în Redis & In-Memory Data Store

Citește mesaje dintr-un stream ca membru al unui grup de consumatori; fiecare mesaj ajunge la un singur consumator.

Sintaxă comandă
XREADGROUP GROUP group consumer [COUNT count] [BLOCK milliseconds] [NOACK] STREAMS key [key ...] id [id ...]

Ce face XREADGROUP

XREADGROUP este varianta lui XREAD pentru grupuri. Consumatorul se identifică prin nume (de exemplu worker1). Cu ID-ul special > primește mesaje noi, care nu au fost livrate încă nimănui din grup.

Mesajele livrate intră în lista de „în așteptare” (PEL) a consumatorului până când acesta le confirmă cu XACK. Dacă dai un ID în loc de > (de exemplu 0), primești propriile mesaje livrate, dar neconfirmate – util după o repornire. NOACK sare peste confirmare (mesajul e considerat procesat imediat).

Parametri

Parametru Descriere
GROUP group consumer Grupul și numele consumatorului.
COUNT count Maximum de mesaje întoarse.
BLOCK milliseconds Așteaptă mesaje noi până la atâtea milisecunde.
NOACK Nu adaugă mesajele în PEL (fără confirmare).
STREAMS key ... id ... > = mesaje noi; alt ID = mesajele proprii neconfirmate.

Ce returnează

Aceeași structură ca XREAD, sau (nil) dacă a expirat BLOCK.

Exemple

Exemplul 1: Doi workeri își împart comenzile

worker1 primește prima comandă, worker2 pe a doua: niciunul nu primește același mesaj.

XREADGROUP GROUP facturare worker1 COUNT 1 STREAMS comenzi >
XREADGROUP GROUP facturare worker2 COUNT 1 STREAMS comenzi >

Ieșire în redis-cli

127.0.0.1:6379> XREADGROUP GROUP facturare worker1 COUNT 1 STREAMS comenzi >
1) 1) "comenzi"
   2) 1) 1) "1792915200000-0"
         2) 1) "client"
            2) "Ana"
            3) "oras"
            4) "Iasi"
            5) "total"
            6) "120"
127.0.0.1:6379> XREADGROUP GROUP facturare worker2 COUNT 1 STREAMS comenzi >
1) 1) "comenzi"
   2) 1) 1) "1792915260000-0"
         2) 1) "client"
            2) "Dan"
            3) "oras"
            4) "Cluj"
            5) "total"
            6) "85"

Exemplul 2: După o repornire: mesajele neconfirmate

Cu ID-ul 0, worker1 primește din nou mesajul pe care nu l-a confirmat încă.

XREADGROUP GROUP facturare worker1 STREAMS comenzi 0

Ieșire în redis-cli

127.0.0.1:6379> XREADGROUP GROUP facturare worker1 STREAMS comenzi 0
1) 1) "comenzi"
   2) 1) 1) "1792915200000-0"
         2) 1) "client"
            2) "Ana"
            3) "oras"
            4) "Iasi"
            5) "total"
            6) "120"

Greșeli frecvente

  • Dacă nu confirmi cu XACK, PEL-ul crește la nesfârșit și mesajele par „blocate” la consumatori.
  • La pornirea workerului, citește întâi cu ID 0 (mesajele rămase de dinainte), apoi treci la >.
  • Mesajele unui consumator care a dispărut definitiv se preiau de alt consumator cu XCLAIM sau XAUTOCLAIM.

Comenzi înrudite

  • XGROUP CREATE: Creează un grup de consumatori pe un stream, astfel încât mai mulți workeri să-și împartă mesajele.
  • XACK / XPENDING: XACK confirmă că un mesaj din grup a fost procesat; XPENDING arată mesajele livrate, dar încă neconfirmate.
  • XREAD: Citește intrări noi din unul sau mai multe stream-uri, după un ID dat, opțional așteptând (BLOCK) până apar date.
  • LMOVE / BLMOVE: Mută atomic un element dintr-o listă în alta, alegând capătul din care scoate și capătul în care pune.