Я хочу уточнить - блокируется микросервис (мс) вообще целиком или все-таки только поток, из которого сделан вызов?
Блокировка чисто логическая. Благодаря асинхронщине, в большинстве языков никакие потоки блокироваться не будут. Будет только приостановлено выполнение кода в рамках какого-то процесса.
Я себе представляю работу так: пусть у нас 2 мс, А и В, сделаны на Spring Web или любом другом веб-фреймворке. Каждого мс по одному экземпляру.
* Пользователь что-то щелкает.
* запрос уходит в А.
* в А создается новый поток (или берется из пула - не важно) для обслуживания пришедшего запроса.
* А вызывает В и ждет от него ответа.
* при этом блокируется не весь А, а только поток, который обслуживает запрос.
Условно так, но на практике даже поток не будет блокироваться - только обработка запроса от пользователя (пользователь не получит ответ, пока B не вернёт ответ)
Стало быть, если другой пользователь тоже что-то щелкнет, то его запрос тоже будет обслуживаться отдельным потоком, и поэтому сам мс А не блокируется, продолжает нормально работать. Так почему тогда в книге написано, что блокируется микросервис?
В книге так написано, чтобы было различие между асинхронными и синхронными запросами.
При асинхронных запросах, вызывающий сервис вообще ничего не должен ждать - он получит уведомление о том, что его запрос обработан.