Микросервисная система бронирования отелей, построенная на Spring Boot и Spring Cloud.
Система состоит из следующих микросервисов:
- Eureka Server (порт 8761) - Service Registry для обнаружения сервисов
- API Gateway (порт 8080) - Шлюз для маршрутизации запросов
- Hotel Management Service (порт 8081) - Управление отелями и номерами
- Booking Service (порт 8082) - Управление бронированиями и пользователями
- Регистрация и авторизация (JWT токены)
- Просмотр доступных отелей и номеров
- Создание бронирований (с автоподбором комнат)
- Просмотр истории бронирований
- Отмена бронирований
- CRUD операции с отелями и номерами
- Управление пользователями
- Просмотр статистики загруженности
- Распределенные транзакции: Двухшаговая согласованность между сервисами
- Идемпотентность: Повторные запросы не создают дубликатов
- Retry механизм: Автоматические повторы с экспоненциальной задержкой
- Компенсация: Откат изменений при ошибках
- JWT аутентификация: Безопасность на уровне каждого сервиса
- Java 17+
- Maven 3.6+
- Запуск Eureka Server:
cd eureka-server
mvn spring-boot:run- Запуск Hotel Management Service:
cd hotel-management-service
mvn spring-boot:run- Запуск Booking Service:
cd booking-service
mvn spring-boot:run- Запуск API Gateway:
cd api-gateway
mvn spring-boot:runPOST /api/user/register- Регистрация пользователяPOST /api/user/auth- Авторизация пользователя
POST /api/booking- Создать бронированиеGET /api/bookings- История бронированийGET /api/booking/{id}- Получить бронированиеDELETE /api/booking/{id}- Отменить бронирование
GET /api/hotels- Список отелейGET /api/rooms- Список доступных номеровGET /api/rooms/recommend- Рекомендуемые номера
POST /api/hotels- Создать отельPOST /api/rooms- Создать номерGET /api/user- Список пользователейPOST /api/user- Создать пользователяPATCH /api/user/{id}- Обновить пользователяDELETE /api/user/{id}- Удалить пользователя
POST /api/rooms/{id}/confirm-availability- Подтвердить доступность номераPOST /api/rooms/{id}/release- Снять блокировку номера
(Открыт доступ в Security config) После запуска сервисов документация доступна по адресам:
- Hotel Management Service: http://localhost:8081/swagger-ui/index.html
- Booking Service: http://localhost:8082/swagger-ui/index.html
(Открыт доступ в Security config) Каждый сервис использует in-memory H2 базу данных:
- Hotel Management Service: http://localhost:8081/h2-console
- Booking Service: http://localhost:8082/h2-console
Полная схема базы данных DATABASE_SCHEMA.md
- Eureka Dashboard: http://localhost:8761
- H2 Console: доступна для каждого сервиса на соответствующем порту
Для запуска тестов:
mvn test
# Только тесты Booking Service
mvn test -pl booking-service
# Только тесты Hotel Management Service
mvn test -pl hotel-management-serviceСистема включает полный набор интеграционных тестов, покрывающих все критические сценарии:
- Регистрация и авторизация пользователей
- Создание бронирований (обычных и с автоподбором)
- Получение истории бронирований
- Отмена бронирований
- Проверка авторизации и валидации
- Подтверждение бронирований - успешный сценарий
- Компенсация при сбоях - отмена при ошибках Hotel Service
- Идемпотентность - повторные запросы не создают дубликатов
- Retry механизм - автоматические повторы с экспоненциальной задержкой
- Исчерпание повторов - компенсация после неудачных попыток
- Параллельные бронирования одного номера
- Конфликты бронирований - корректная обработка пересечений
- Race conditions - предотвращение гонок данных
- Автоподбор при параллельных запросах
- Retry при параллельных запросах
- Неверные данные - валидация входных параметров
- Таймауты сервисов - обработка недоступности Hotel Service
- Неавторизованный доступ - проверка безопасности
- Несуществующие ресурсы - обработка ошибок 404
- Нарушения ограничений БД - обработка конфликтов
- CRUD операции с отелями и номерами
- Подтверждение доступности номеров
- Идемпотентность запросов доступности
- Конфликты бронирований - предотвращение пересечений
- Освобождение номеров - компенсационные действия
- Статистика загруженности - счетчик times_booked
- Параллельные запросы доступности
- Авторизация - проверка ролей ADMIN/USER
- Корректную работу распределенных транзакций
- Обработку параллельных запросов без гонок данных
- Компенсацию при ошибках и таймаутах
- Идемпотентность операций
- Retry механизм с экспоненциальной задержкой
- Валидацию входных данных
- Безопасность и авторизацию
hotel-booking-system/
├── eureka-server/ # Service Registry
├── api-gateway/ # API Gateway
├── hotel-management-service/ # Hotel & Room management
├── booking-service/ # Booking & User management
├── common-lib/ # Общая library по DRY
└── pom.xml # Parent POM
