Если в прошлый раз мы притворялись, что все синхронно,
то теперь наоборот — делаем синхронку на асинхронке.
И тут ощущение еще страннее: вроде очередь… но ведет себя как API.
Как это выглядит:
— X отправляет сообщение в очередь
— Y его обрабатывает и ответ возвращается тоже через очередь
— X сидит и ждет как ни в чем не бывало
И в голове у X:
"я сделал запрос и получил ответ и не финальный. Хотя ни одного HTTP-вызова не было."
Зачем так жить?
1️⃣ Изоляция сервисов
Нет прямых вызовов — только брокер.
Но бизнесу все равно нужен «запрос → ответ».
2️⃣ Надежность
Очереди умеют ретраи и доставку.
HTTP — умеет падать.
3️⃣ Контроль нагрузки
Очередь — это буфер.
Можно не ловить пики лицом.
4️⃣ Саги и процессы
Все общается событиями, но отдельные шаги хочется мыслить как вызовы.
Что по факту происходит?
Мы берем асинхронную инфраструктуру и начинаем использовать ее как синхронную.
Немного против природы. Но работает.
Почему это больно?
— ответ может прийти «когда-нибудь»
— correlation id становится вашим лучшим другом
— дебаг выглядит как археология сообщений
Когда это нормально?
— event-driven архитектура
— нет прямых соединений
— важнее надежность, чем скорость
Когда не надо?
— если можно просто сделать HTTP-запрос
— если важны миллисекунды, а не «дойдёт точно»
В итоге картина симметричная:
💃👯♀️асинхронка на синхронке — чтобы упростить жизнь клиенту
👯♀️💃 синхронка на асинхронке — чтобы выжить внутри системы
Мы либо притворяемся, что все просто, либо притворяемся, что все надежно.
Иногда — одновременно 😅 Да, такое тоже бывает!