Какие каналы интеграции микросервисов вы использовали в последнем проекте?

«Какие каналы интеграции микросервисов вы использовали в последнем проекте?» — вопрос из категории Архитектура, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В проекте применялись два основных канала:

1. Синхронная коммуникация (REST API)

  • Использовался Spring Boot с OpenFeign для декларативных HTTP-клиентов.
  • Пример Feign-интерфейса:
    @FeignClient(name = "order-service", url = "${order.service.url}")
    public interface OrderServiceClient {
        @GetMapping("/orders/{id}")
        Order getOrder(@PathVariable("id") Long id);
    }

2. Асинхронная коммуникация (Event-Driven)

  • Основной брокер: RabbitMQ с обработкой сообщений через @RabbitListener.
  • Резервный канал: Для критически важных событий дублировали отправку в Kafka с механизмом повторных попыток (retry).

Почему такая комбинация? REST — для прямых запросов-ответов, а RabbitMQ/Kafka — для развязки сервисов и повышения отказоустойчивости.