Українська
Підсумки
Висновки
Брокер повідомлень робить взаємодію сервісів асинхронною та слабко зв’язаною: відправник і отримувач не залежать один від одного ні в часі, ні в кількості, ні у швидкості, а черга згладжує піки навантаження. RabbitMQ реалізує модель AMQP 0-9-1: видавець надсилає повідомлення в обмінник, обмінник за прив’язками й ключем маршрутизації кладе копії в черги, а брокер доставляє їх споживачам. Обмінники direct, fanout, topic і headers реалізують маршрутизацію, публікацію–підписку і розсилку за темами. Черга завдань з конкуруючими споживачами, ручними підтвердженнями й prefetch розподіляє роботу між процесами й переживає падіння робітників. Гарантія at-least-once складається зі стійких черг і повідомлень, підтверджень видавця і споживача; дублікати усуває ідемпотентний споживач. Кворумні черги реплікують дані й обмежують кількість невдалих доставок, dead letter exchange і TTL дозволяють будувати повтори із затримкою та чергу розбору помилок, а потоки зберігають історію повідомлень. Клієнт RabbitMQ.Client 7 надає повністю асинхронний API, а вебконсоль і утиліти брокера – засоби спостереження й керування.
Питання для самоперевірки
- Які переваги дає обмін повідомленнями через брокер порівняно з прямим викликом? Які недоліки?
- Назвіть сутності моделі AMQP 0-9-1 і роль кожної.
- Чим з’єднання відрізняється від каналу? Скільки з’єднань і каналів створює типовий застосунок?
- Для чого призначені віртуальні хости? Які права має користувач RabbitMQ?
- Як запустити RabbitMQ у Docker? Для чого потрібні порти 5672 і 15672, том і
--hostname? - Що означають параметри
durable,exclusive,autoDeleteчерги? Чому RabbitMQ 4.3 відхиляє нестійку неексклюзивну чергу? - Як працює типовий обмінник? Як опублікувати повідомлення в конкретну чергу?
- Що таке черга завдань і конкуруючі споживачі? Як масштабувати обробку?
- Чим відрізняються
autoAck: trueі ручні підтвердження? Що відбувається з невідтвердженими повідомленнями після падіння споживача? - Для чого потрібен prefetch? Як він впливає на розподіл роботи й пропускну здатність?
- Порівняйте обмінники direct, fanout, topic і headers. Що означають
*і#у шаблонах? - Які умови потрібні, щоб повідомлення пережило перезапуск брокера?
- Що таке підтвердження видавця? Як їх увімкнути в
RabbitMQ.Client7 і як пришвидшити публікацію з підтвердженнями? - Що означає
mandatory: true? Як видавець дізнається про нерозподілене повідомлення? - Поясніть семантику at-most-once та at-least-once. Чому брокер не гарантує «рівно один раз»?
- Що таке ідемпотентний споживач і як його реалізувати?
- Чим відрізняються класичні, кворумні черги й потоки?
- Що таке dead letter exchange? Коли повідомлення «вмирає»? Що містить заголовок
x-death? - Як організувати повторні спроби із затримкою та чергу parking-lot?
- Як реалізувати RPC через черги? Для чого потрібні
ReplyToіCorrelationId?
Корисні посилання
- Навчальні посібники RabbitMQ: https://www.rabbitmq.com/tutorials
- Модель AMQP 0-9-1: https://www.rabbitmq.com/tutorials/amqp-concepts
- Клієнт .NET: https://www.rabbitmq.com/client-libraries/dotnet-api-guide
- Підтвердження споживача й видавця: https://www.rabbitmq.com/docs/confirms
- Prefetch: https://www.rabbitmq.com/docs/consumer-prefetch
- Кворумні черги: https://www.rabbitmq.com/docs/quorum-queues
- Dead letter exchange: https://www.rabbitmq.com/docs/dlx
- TTL: https://www.rabbitmq.com/docs/ttl
- Потоки: https://www.rabbitmq.com/docs/streams
- Вебконсоль керування: https://www.rabbitmq.com/docs/management
- Образ Docker: https://hub.docker.com/_/rabbitmq
- Пакет NuGet: https://www.nuget.org/packages/RabbitMQ.Client