Először is, 100 feldolgozatlan üzenet van a rabbitmq szerverünkön, véletlenszerűen nyitunk egy fogyasztói klienst, és a következő helyzet jelenik meg,
100 adatdarab, mind egy pillanat alatt átdobva, de egyetlen klienssel nem tudjuk egyszerre ennyi adatot feldolgozni, mit tegyünk?
Ahogy a fenti képen is látható, nem erősítettük meg az üzenet megérkezését! Ha a gyártó továbbra is küldi, mi, fogyasztók továbbra is megkapjuk!
Képzeld el, ha mi, egy fogyasztó, akár 60 üzenetet is feldolgozhatunk egy perc alatt, viszont egy producer 300 üzenetet küldhet egy perc alatt, ha,Van egy fogyasztói kliensünk, amelynek egyszerre 300 üzenetet kell fogadnia egy perc alatt, ami túllépte a maximális terhelésünket, ami a szerver erőforrásainak kimerüléséhez vezethet, és a fogyasztói kliens elakad。
A RabbitMQ qoS (Quality of Service) funkciót kínál, vagyis az üzenetek nem automatikus megerősítésének alapja alapján, ha egy bizonyos számú üzenetet (a Qos értékét a fogyasztó vagy csatorna alapján állítva) nem erősítenek meg, akkor új üzenetek nem kerülnek el.
prefetchSize:0 prefetchCount: Azt mondja a RabbitMQ-nak, hogy egyszerre ne küldjön több üzenetet a fogyasztónak, azaz ha van N üzenet, ami még nem érkezett vissza, a felhasználó blokkol, amíg nem érkezik üzenet jóváhagyása global:true\false Egyszerűen, hogy a fenti beállításokat csatornákra alkalmazzák, akár csatornaszinten, akár fogyasztói szinten vannak-e a korlátozások
Megjegyzés: Azt mondják, hogy a prefetchSize és a global nem implementálják a rabbitmq, ezért egyelőre nem fogom tanulmányozni őket
prefetch_count akkor lép életbe, amikor no_ask=hamis,Vagyis az automatikus válasz esetén ezek a két érték a következők:Nem hatokof
Állítsuk be prefetchCount = 3-at a BasicQos módszerrel. Ez lehetővé teszi, hogy a RabbitMQ egyszerre akár 3 üzenetet is feldolgozzon fogyasztónként. Más szóval, nem fog új üzeneteket küldeni a fogyasztónak, amíg az nem kapja meg az elutasítást. Íme, hogyan lehet beállítani:
Ahogy az ábrán látható, két felhasználó egyszerre hallgatja a Queue-t, de fontos megjegyezni, hogy az üzenetet csak akkor veszik fel automatikusan, ha az egyik fogyasztó fogyasztja el, és a másik felhasználó nem kapja meg ezt az üzenetet többé.
Hivatalos weboldal bevezetése: http://www.rabbitmq.com/consumer-prefetch.html
Fontos megjegyezni, hogy ez a módszer miatt a sor megtelhet. Természetesen lehet, hogy több Fogyasztót kell hozzáadnod vagy több virtuális Hostet kell létrehoznod a dizájn finomításához.
|