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

Вид: 26359|Відповідь: 2

Глибокий аналіз механізму відповіді на повідомлення RabbitMQ

[Копіювати посилання]
Опубліковано 30.03.2018 10:42:59 | | | |


Коли споживач отримує повідомлення і завдання обробки завершено, він надсилає ack з цим ідентифікатором повідомлення, щоб повідомити серверу, що повідомлення отримано і обробка завершена. RabbitMQ чекає, поки посилання споживача, що обробляє повідомлення, не буде втрачено, перш ніж визначити, що повідомлення було оброблене неправильно, тому RabbitMQ передає повідомлення повторно.
Підтвердження повідомлення за замовчуванням вимкнене. Існує параметр noAck при ініціалізації Consumer,Якщо встановлено true, користувач поверне ack одразу після отримання повідомлення


Загалом, найпоширеніший сценарій noack зазвичай встановлюється як true, але для проєктів із високими ризиковими вимогами, такими як оплата. Для кожного повідомлення ми маємо забезпечити його цілісність і правильність. Після отримання повідомлення потрібно переконатися, що виконана правильна бізнес-логіка, а потім активно повернути ack серверу. Ви можете переглядати повідомлення в черзі через команду rabbitmqctl list_queues name message_rady message_unacknowleded або через інтерфейс фонового управління.

Якщо noAck встановлено як false, клієнт повинен активно надіслати ack серверу, і якщо клієнт не підтверджує повідомлення, виникає така ситуація:



Поки програма працює, ці 10 повідомлень залишаються неактивними і не можуть бути повторно доставлені RabbitMQ. Ще потужніше те, щоСпоживання повідомлень у RabbitMQ не має механізму тайм-ауту, тобто якщо програму не перезавантажити, повідомлення завжди буде у стані Unacked. Не забувайте про ці неатаковані повідомлення стану при роботі з операційними подіями.

Готовий

Повідомлення з таким статусом існують у черзі для обробки.

Не визнано

Повідомлення в цьому статусі вказує, що воно вже обробляється, але не підтверджується.




Коли програма закрита (за умови, що Споживач закритий), ці 10 повідомлень повертаються у стан Готовність.


Повідомлення підтвердження

Що, якщо клієнт надішле ACK серверу? Тобто, підтвердити отримання повідомлення? Код виглядає так:


Коли другий параметр методу BasicAck, кратний, встановлений як false, це означає, що RabbitMQ отримує сповіщення про підтвердження поточного повідомлення.Якщо це правда, додаткове повідомлення менше, ніж тег доставки, зазначений першим параметром, буде підтверджено。 (Масове підтвердження стосується всього каналу)

Скасувати підтвердження

Що, якщо один із клієнтів розподіленої програми має виняток і хоче скасувати підтвердження повідомлення, дозволяючи іншим клієнтам обробляти повідомлення?

Коли в повідомленні про споживання є виняток, потрібно скасувати підтвердження, після чого можна використати метод basicReject Channel.

Перший параметр визначає тег доставки, а другий — як обробляти це повідомлення про відмову.Значення true означає, що повідомлення повертається у заголовок черги, а значення false означає, що повідомлення залишають




Попередній:Навчу вас налаштувати власний DNS-сервер!
Наступний:Baidu Maps для отримання координат міста
Опубліковано 22.09.2021 20:49:04 |
Навчися вчитися...
Застереження:
Усе програмне забезпечення, програмні матеріали або статті, опубліковані Code Farmer Network, призначені лише для навчання та досліджень; Вищезазначений контент не повинен використовуватися в комерційних чи незаконних цілях, інакше користувачі несуть усі наслідки. Інформація на цьому сайті надходить з Інтернету, і спори щодо авторських прав не мають до цього сайту. Ви повинні повністю видалити вищезазначений контент зі свого комп'ютера протягом 24 годин після завантаження. Якщо вам подобається програма, будь ласка, підтримуйте справжнє програмне забезпечення, купуйте реєстрацію та отримайте кращі справжні послуги. Якщо є будь-яке порушення, будь ласка, зв'яжіться з нами електронною поштою.

Mail To:help@itsvse.com