Асинхронное взаимодействие
Работу можно передать и не ждать её завершения
При асинхронном взаимодействии отправитель передаёт сообщение или событие и продолжает работу, не требуя от получателя немедленного ответа в том же вызове.
Service A -> message broker -> Service B
|
+-> continues
Например, после создания заказа основной запрос может завершиться, а отправка письма, обновление аналитики и другие фоновые действия будут выполнены отдельно.
Сервисы меньше зависят друг от друга по времени
Получатель может временно работать медленнее или быть недоступен, а сообщения некоторое время останутся в промежуточном слое. Это помогает переживать кратковременные пики и не заставляет отправителя ждать каждую фоновую операцию.
Но результат становится не мгновенным. Между отправкой сообщения и фактическим изменением другой части системы появляется задержка, поэтому пользователю или следующему сервису иногда приходится работать с ещё не обновлённым состоянием.
Асинхронность требует явного контроля состояния
Если нужно узнать итог фоновой операции, его нельзя просто получить как return-значение текущего вызова. Приходится хранить статус, связывать сообщения идентификаторами или получать отдельное событие о завершении.
Кроме того, одно и то же сообщение может прийти повторно, а порядок обработки не всегда совпадает с порядком отправки. Дальше в разделе мы отдельно разберём паттерны доставки и способ безопасно относиться к повторам.