Ответ
В проекте применялись два основных канала:
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 — для развязки сервисов и повышения отказоустойчивости.