Ответ
Синхронная коммуникация — это способ взаимодействия между сервисами, при котором отправитель запроса блокирует выполнение и ожидает ответа от получателя в реальном времени, прежде чем продолжить работу.
Ключевая характеристика: Прямая, блокирующая связь по принципу «запрос-ответ».
Пример: REST API вызов через HTTP.
// Сервис A (клиент) синхронно вызывает Сервис B
@Service
public class OrderService {
@Autowired
private RestTemplate restTemplate;
public Order processOrder(Long orderId) {
// 1. Выполняется синхронный HTTP-запрос.
// Поток выполнения блокируется здесь, пока не придёт ответ.
ResponseEntity<User> response = restTemplate.getForEntity(
"http://user-service/api/users/{userId}", // Адрес Сервиса B
User.class,
order.getUserId()
);
// 2. Только после получения ответа выполнение продолжается.
User user = response.getBody();
// 3. Дальнейшая логика обработки заказа с данными пользователя...
return enrichedOrder;
}
}
Типичные технологии:
- REST/HTTP (Spring
RestTemplate, Feign,WebClientв блокирующем режиме) - gRPC
- GraphQL (запросы)
Преимущества:
- Простота: Понятная модель, похожая на вызов локального метода.
- Согласованность: Легче обеспечить строгую согласованность данных (в рамках одного запроса).
Недостатки:
- Связность: Создаёт тесную временную связь между сервисами.
- Отказоустойчивость: Если Сервис B недоступен или медленный, Сервис A также «падает» или зависает.
- Масштабируемость: Ресурсы клиента заняты в ожидании, что может привести к исчерпанию пула потоков.
Альтернатива: Асинхронная коммуникация (очереди сообщений, брокеры событий).