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
XCLAIMsauXAUTOCLAIM.
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.