Какие технологии для межсервисного взаимодействия (Microservices) вы использовали?

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

Ответ

Синхронное взаимодействие:

  • REST/HTTP: Наиболее распространенный подход. Использовал Spring Boot (с @RestController) и JAX-RS для создания API, а также Feign Client и Retrofit для вызовов других сервисов.
    @RestController
    @RequestMapping("/api/users")
    public class UserController {
        @GetMapping("/{id}")
        public ResponseEntity<User> getUser(@PathVariable Long id) {
            // ... логика получения пользователя
            return ResponseEntity.ok(user);
        }
    }
  • gRPC: Для высокопроизводительного RPC-взаимодействия. Использовал Protocol Buffers для определения контрактов.

Асинхронное взаимодействие (обмен сообщениями):

  • Apache Kafka: Для построения потоков данных, событийной архитектуры (Event-Driven).

    @Autowired
    private KafkaTemplate<String, String> kafkaTemplate;
    
    public void sendEvent(String topic, String eventMessage) {
        kafkaTemplate.send(topic, eventMessage); // Асинхронная отправка
    }
  • RabbitMQ: Для фоновых задач и работы по протоколу AMQP.

Другие технологии:

  • GraphQL (Apollo): Для гибкого API, когда клиенту нужны только конкретные данные.
  • WebSocket (STOMP): Для двусторонней real-time коммуникации (например, чаты, уведомления).

Выбор технологии зависит от требований: скорость (gRPC), гибкость (GraphQL), надежность и масштабируемость (Kafka), простота (REST).