HTML Diff
0 added 0 removed
Original 2026-01-01
Modified 2026-03-10
1 <p>Как известно, схемы синхронного и асинхронного взаимодействия на основе REST API имеют свои недостатки. Чтобы эти недостатки нивелировать, существуют очереди сообщений -<strong>Message Queues</strong>. Поговорим о принципах их работы.</p>
1 <p>Как известно, схемы синхронного и асинхронного взаимодействия на основе REST API имеют свои недостатки. Чтобы эти недостатки нивелировать, существуют очереди сообщений -<strong>Message Queues</strong>. Поговорим о принципах их работы.</p>
2 <p>Очереди предоставляют буфер, обеспечивающий временное хранение сообщений, и конечные точки, позволяющие в свою очередь подключаться к очереди в целях отправки/получения сообщений в асинхронном режиме. В таких сообщениях могут быть: - запросы; - ответы; - ошибки; - прочие данные, которые передаются между программными компонентами.</p>
2 <p>Очереди предоставляют буфер, обеспечивающий временное хранение сообщений, и конечные точки, позволяющие в свою очередь подключаться к очереди в целях отправки/получения сообщений в асинхронном режиме. В таких сообщениях могут быть: - запросы; - ответы; - ошибки; - прочие данные, которые передаются между программными компонентами.</p>
3 <p>В очередях сообщений существует компонент, который называют производителем -<strong>Producer</strong>. Он служи для добавления сообщения в очередь, где оно станет храниться до тех пор, пока другой компонент с именем потребитель (<strong>Consumer</strong>) не извлечет это сообщение и не выполнит с ним нужную операцию.</p>
3 <p>В очередях сообщений существует компонент, который называют производителем -<strong>Producer</strong>. Он служи для добавления сообщения в очередь, где оно станет храниться до тех пор, пока другой компонент с именем потребитель (<strong>Consumer</strong>) не извлечет это сообщение и не выполнит с ним нужную операцию.</p>
4 <p>Вот как можно представить очередь сообщений:</p>
4 <p>Вот как можно представить очередь сообщений:</p>
5 <p>На практике очереди могут поддерживать получение сообщений и посредством метода<strong>Push</strong>, и посредством метода<strong>Pull</strong>. При этом: • в случае с<strong>Pull</strong>подразумевается периодический опрос очереди получателем на предмет наличия новых сообщений; • в случае с<strong>Push</strong>подразумевается отправка уведомления получателю в случае прихода сообщения. Также здесь реализуется модель "Издатель/Подписчик" (Publisher/Subscriber).</p>
5 <p>На практике очереди могут поддерживать получение сообщений и посредством метода<strong>Push</strong>, и посредством метода<strong>Pull</strong>. При этом: • в случае с<strong>Pull</strong>подразумевается периодический опрос очереди получателем на предмет наличия новых сообщений; • в случае с<strong>Push</strong>подразумевается отправка уведомления получателю в случае прихода сообщения. Также здесь реализуется модель "Издатель/Подписчик" (Publisher/Subscriber).</p>
6 <p>Как известно, очереди могут работать одновременно с несколькими производителями и потребителями. По этой причине очереди, как правило, реализуют посредством дополнительной системы, которую называют<strong>брокер</strong>.</p>
6 <p>Как известно, очереди могут работать одновременно с несколькими производителями и потребителями. По этой причине очереди, как правило, реализуют посредством дополнительной системы, которую называют<strong>брокер</strong>.</p>
7 <p><strong>Message Broker</strong>- это брокер сообщений, который занимается как сбором, так и маршрутизацией сообщений, используя для этого предопределенную логику. При этом сообщения можно передавать с некоторым ключом - как раз таки по этому ключу брокер и понимает, в какую именно очередь (в одну либо в несколько) должно попасть нужное сообщение.</p>
7 <p><strong>Message Broker</strong>- это брокер сообщений, который занимается как сбором, так и маршрутизацией сообщений, используя для этого предопределенную логику. При этом сообщения можно передавать с некоторым ключом - как раз таки по этому ключу брокер и понимает, в какую именно очередь (в одну либо в несколько) должно попасть нужное сообщение.</p>
8 <p>Давайте приведем пример, связанный с отправкой рецензии (отзыва) на сайте. Существует часть сервиса, к которой обращается пользователь. Эта часть выступает в роли производителя, который направляет запросы на создание отзывов в очередь сообщений. В момент добавления сообщения в очередь юзеру можно сразу направлять уведомление, что операция прошла успешно. В результате вся последующая логика обработки станет выполняться вне зависимости от пользователя.</p>
8 <p>Давайте приведем пример, связанный с отправкой рецензии (отзыва) на сайте. Существует часть сервиса, к которой обращается пользователь. Эта часть выступает в роли производителя, который направляет запросы на создание отзывов в очередь сообщений. В момент добавления сообщения в очередь юзеру можно сразу направлять уведомление, что операция прошла успешно. В результате вся последующая логика обработки станет выполняться вне зависимости от пользователя.</p>
9 <p>После окончания обработки потребитель выполнит отправку подтверждения в очередь, в результате чего исходное сообщение удалится. Однако если в процессе обработки произойдет какой-нибудь сбой и подтверждение вовремя получено не будет, сообщение можно повторно извлечь потребителем из очереди.</p>
9 <p>После окончания обработки потребитель выполнит отправку подтверждения в очередь, в результате чего исходное сообщение удалится. Однако если в процессе обработки произойдет какой-нибудь сбой и подтверждение вовремя получено не будет, сообщение можно повторно извлечь потребителем из очереди.</p>
10 <p>Вот как выглядит один из вариантов асинхронного взаимодействия, построенный на основе очереди сообщений:</p>
10 <p>Вот как выглядит один из вариантов асинхронного взаимодействия, построенный на основе очереди сообщений:</p>
11 <h2>Выводы</h2>
11 <h2>Выводы</h2>
12 <p>Итак, применение очередей сообщений позволит решить две задачи одновременно: - сокращение времени ожидания пользователя благодаря асинхронной обработке; - предотвращение потери информации при сбоях.</p>
12 <p>Итак, применение очередей сообщений позволит решить две задачи одновременно: - сокращение времени ожидания пользователя благодаря асинхронной обработке; - предотвращение потери информации при сбоях.</p>
13 <p>Однако не стоит рассматривать очереди в качестве универсального средства для любого вида приложений. Дело в том, что у такого подхода тоже есть и плюсы, и минусы. Но о них мы поговорим в следующей статье, следите за обновлениями!</p>
13 <p>Однако не стоит рассматривать очереди в качестве универсального средства для любого вида приложений. Дело в том, что у такого подхода тоже есть и плюсы, и минусы. Но о них мы поговорим в следующей статье, следите за обновлениями!</p>
14 <p><em>По материалам https://mcs.mail.ru/blog/.</em></p>
14 <p><em>По материалам https://mcs.mail.ru/blog/.</em></p>
15  
15