Ця стаття є дзеркальною статтею машинного перекладу, будь ласка, натисніть тут, щоб перейти до оригінальної статті.

Вид: 23648|Відповідь: 0

Обмеження споживчої паралельної обробки RabbitMQ BasicQos

[Копіювати посилання]
Опубліковано 10.04.2018 22:36:02 | | | |


По-перше, на нашому сервері rabbitmq є 100 необроблених повідомлень, ми випадково відкриваємо споживчий клієнт, і з'являється така ситуація,

100 об'єктів даних, усі миттєво, але ми не можемо обробляти стільки даних одночасно з одним клієнтом, що нам робити?




Як показано на зображенні вище, ми не підтвердили отримання повідомлення! Якщо виробник продовжить надсилати її, ми, споживачі, будемо отримувати її й надалі!

Уявіть собі, якщо ми, один споживач, можемо обробити до 60 повідомлень за 1 хвилину, однак виробник може надіслати 300 повідомлень за 1 хвилину, якщо,У нас є клієнт-споживач, який має отримати 300 повідомлень одночасно за 1 хвилину, що перевищує наше максимальне навантаження, що може призвести до вичерпання ресурсів сервера і зависання споживчого клієнта
RabbitMQ надає функцію qoS (якість обслуговування), тобто за умови неавтоматичного підтвердження повідомлень, якщо певна кількість повідомлень (встановлюючи значення Qos на основі споживання або каналу) не підтверджується, нові повідомлення не будуть споживатися.



prefetchSize:0
prefetchCount: Повідомляє RabbitMQ не надсилати споживачеві більше ніж N повідомлень одночасно, тобто якщо є N повідомлень, які ще не ack, споживач блокуватиме, доки не з'явиться повідомлення ack
global:true\false Чи застосовуються вищезазначені налаштування до каналів, простіше кажучи, чи стосуються вищезазначених обмежень на рівні каналу чи на рівні споживача
Примітка: Кажуть, що prefetchSize і глобальні не реалізовані rabbitmq, тому я наразі не буду їх вивчати


prefetch_count набуває чинності, коли no_ask=falseТобто, у випадку автовідповіді ці два значення єНе має діїз

Встановіть prefetchCount = 3 за допомогою методу BasicQos. Це дозволяє RabbitMQ обробляти до 3 повідомлень на одного споживача одночасно. Іншими словами, він не розповсюджує нові повідомлення споживачу, доки не отримає ack. Ось як це налаштувати:





Як видно на рисунку, одночасно слухають Queue двоє споживачів, але зверніть увагу, що повідомлення тут автоматично буде зафіксовано лише якщо його споживає один споживач, а інший споживач більше не отримає це повідомлення.

Офіційне вступ до сайту: http://www.rabbitmq.com/consumer-prefetch.html

Зверніть увагу, що цей метод може призвести до заповнення черги. Звісно, можливо, доведеться додати більше споживачів або створити більше віртуальних хостів для вдосконалення дизайну.





Попередній:EF реалізує масові вставки, оновлення та видалення баз даних
Наступний:Веб-сервер IIS Express не вдалося запустити
Застереження:
Усе програмне забезпечення, програмні матеріали або статті, опубліковані Code Farmer Network, призначені лише для навчання та досліджень; Вищезазначений контент не повинен використовуватися в комерційних чи незаконних цілях, інакше користувачі несуть усі наслідки. Інформація на цьому сайті надходить з Інтернету, і спори щодо авторських прав не мають до цього сайту. Ви повинні повністю видалити вищезазначений контент зі свого комп'ютера протягом 24 годин після завантаження. Якщо вам подобається програма, будь ласка, підтримуйте справжнє програмне забезпечення, купуйте реєстрацію та отримайте кращі справжні послуги. Якщо є будь-яке порушення, будь ласка, зв'яжіться з нами електронною поштою.

Mail To:help@itsvse.com