Pirmkārt, mūsu rabbitmq serverī ir 100 neapstrādāti ziņojumi, mēs nejauši atveram patērētāju klientu, un parādīsies šāda situācija:
100 datu vienības, kas tiek pārvietotas vienā mirklī, bet mēs nevaram apstrādāt tik daudz datu vienlaicīgi ar vienu klientu, kas mums jādara?
Kā parādīts iepriekš redzamajā attēlā, mēs neapstiprinājām ziņojuma saņemšanu! Ja ražotājs turpinās to sūtīt, mēs, patērētāji, turpināsim to saņemt!
Iedomājieties, ja mēs viens patērētājs varam apstrādāt līdz 60 ziņojumiem 1 minūtē, tomēr ražotājs var nosūtīt 300 ziņojumus 1 minūtē, ja,Mums ir patērētāja klients, kuram 1 minūtē vienlaikus jāsaņem 300 ziņojumi, kas ir pārsniedzis mūsu maksimālo slodzi, kas var novest pie servera resursu izsmelšanas un patērētāja klienta iestrēgšanas。
RabbitMQ nodrošina qoS (pakalpojumu kvalitātes) funkciju, tas ir, saskaņā ar ziņojumu neautomātiskas apstiprināšanas priekšnoteikumu, ja netiek apstiprināts noteikts ziņojumu skaits (iestatot Qos vērtību, pamatojoties uz patēriņu vai kanālu), jauni ziņojumi netiks patērēti.
prefetchIzmērs:0 prefetchCount: Liek RabbitMQ vienlaicīgi nevirzīt patērētājam vairāk nekā N ziņojumus, t.i., tiklīdz ir N ziņojumi, kas vēl nav saņemti, patērētājs bloķēs, līdz būs ziņojums global:true\false Vai iepriekš minētie iestatījumi tiek lietoti kanāliem, vienkārši sakot, vai iepriekš minētie ierobežojumi ir kanāla vai patērētāja līmenī
Piezīme: Ir teikts, ka prefetchSize un global netiek īstenoti ar rabbitmq, tāpēc es tos pagaidām nepētīšu
prefetch_count stājas spēkā, kad no_ask=false,Tas nozīmē, ka automātiskās atbildes gadījumā šīs divas vērtības irNav spēkāno
Iestatiet prefetchCount = 3, izmantojot BasicQos metodi. Tas ļauj RabbitMQ vienlaikus apstrādāt līdz 3 ziņojumiem vienam patērētājam. Citiem vārdiem sakot, tas neizplatīs jaunus ziņojumus patērētājam, kamēr tas nesaņems ack. Tālāk ir aprakstīts, kā to iestatīt.
Kā redzams attēlā, ir divi patērētāji, kas vienlaikus klausās rindu, taču ņemiet vērā, ka ziņojums šeit tiks automātiski uztverts tikai tad, ja to patērēs viens patērētājs, un otrs patērētājs šo ziņojumu vairs nesaņems.
Oficiālās mājas lapas ievads: http://www.rabbitmq.com/consumer-prefetch.html
Ņemiet vērā, ka šī metode var izraisīt rindas pilnību. Protams, jums, iespējams, būs jāpievieno vairāk patērētāju vai jāizveido vairāk virtualHosts, lai uzlabotu savu dizainu.
|