Ответ
Использовал несколько подходов для межсервисной коммуникации, выбирая их в зависимости от требований.
Основные протоколы и технологии:
- REST API (синхронный): Наиболее часто через Spring Boot с
RestTemplateили декларативным клиентом Feign. - Асинхронные HTTP-запросы: С помощью реактивного
WebClientиз Spring WebFlux для неблокирующих вызовов. - Брокеры сообщений: Apache Kafka для асинхронной, событийной коммуникации и потоковой обработки.
- Другие протоколы: Имею опыт работы с gRPC (для высокопроизводительных RPC) и GraphQL (для гибких запросов данных).
Примеры кода:
-
Feign Client (REST):
@FeignClient(name = "user-service", url = "${user.service.url}") public interface UserClient { @GetMapping("/users/{id}") User getUserById(@PathVariable Long id); }Spring Boot автоматически создает реализацию этого интерфейса для вызовов.
-
WebClient (Асинхронный):
Mono<Data> dataMono = WebClient.create("https://api.example.com") .get() .uri("/data") .retrieve() .bodyToMono(Data.class);Позволяет эффективно использовать ресурсы, не блокируя поток.
Почему важен выбор? Синхронные вызовы (REST) просты, но создают прямую зависимость. Асинхронные подходы (Kafka, WebClient) повышают отказоустойчивость и масштабируемость системы.