Это полнофункциональное микросервисное приложение для электронной коммерции, построенное с использованием Spring Boot и Spring Cloud. Архитектура включает в себя несколько взаимодействующих сервисов, обеспечивающих полный цикл обработки заказов от создания клиента до отправки уведомлений.
- Config Server (порт 8888) - Централизованное управление конфигурациями
- Discovery Service (порт 8761) - Eureka сервер для service discovery
- Gateway Service - API Gateway для маршрутизации запросов
- Customer Service (порт 8090) - Управление клиентами
- Product Service (порт 8050) - Управление товарами
- Order Service - Обработка заказов
- Payment Service - Обработка платежей
- Notification Service - Система уведомлений
- PostgreSQL (порт 5555) - Основная реляционная БД
- MongoDB (порт 27017) - NoSQL база для клиентов и уведомлений
- Apache Kafka - Асинхронная обработка сообщений
- pgAdmin (порт 5050) - Веб-интерфейс для PostgreSQL
- Mongo Express (порт 8081) - Веб-интерфейс для MongoDB
- MailDev (порты 1080/1025) - Тестирование email уведомлений
- Java 17
- Spring Boot 3.5.3
- Spring Cloud 2025.0.0
- Maven 3.9.10+
- PostgreSQL - для Orders, Products, Payments
- MongoDB - для Customers и Notifications
- Apache Kafka - для асинхронного обмена сообщениями
- Docker & Docker Compose - для контейнеризации
- Eureka - Service Discovery
- Spring Cloud Gateway - API Gateway
- Spring Cloud Config - Централизованная конфигурация
- OpenFeign - Межсервисное взаимодействие
- Thymeleaf - Email шаблоны
- Lombok - Уменьшение boilerplate кода
- Flyway - Миграции БД
- Java 17 или выше
- Maven 3.6+
- Docker и Docker Compose
- Git
- Клонирование репозитория
git clone <repository-url>
cd e-commerce-app- Инициализация субмодулей (если используются)
git submodule update --init --recursive- Запуск инфраструктуры
docker-compose up -d- Сборка всех сервисов
# Сборка config-server
cd services/config-server
./mvnw clean install
cd ../..
# Сборка discovery
cd services/discovery
./mvnw clean install
cd ../..
# Аналогично для остальных сервисов- Запуск сервисов в правильном порядке
Шаг 1: Запустите Config Server
cd services/config-server
./mvnw spring-boot:runШаг 2: Запустите Discovery Service
cd services/discovery
./mvnw spring-boot:runШаг 3: Запустите остальные сервисы
# В отдельных терминалах
cd services/customer && ./mvnw spring-boot:run
cd services/product && ./mvnw spring-boot:run
cd services/order && ./mvnw spring-boot:run
cd services/payment && ./mvnw spring-boot:run
cd services/notification && ./mvnw spring-boot:run
cd services/gateway && ./mvnw spring-boot:run- Eureka Dashboard: http://localhost:8761
- pgAdmin: http://localhost:5050
- Email: pgadmin@pgadmin.org
- Password: admin
- Mongo Express: http://localhost:8081
- MailDev: http://localhost:1080
- Host: localhost:5555
- Database: postgres, product
- Username: qwe
- Password: qwe
- Host: localhost:27017
- Username: qwe
- Password: qwe
- Databases: customer
- Создание клиента → Customer Service (MongoDB)
- Просмотр товаров → Product Service (PostgreSQL)
- Создание заказа → Order Service:
- Проверка клиента через Customer Service
- Резервирование товаров через Product Service
- Создание записи заказа (PostgreSQL)
- Обработка платежа → Payment Service (PostgreSQL)
- Уведомления → Notification Service:
- Kafka сообщения от Order и Payment сервисов
- Email уведомления через MailDev
- Сохранение в MongoDB
POST /api/v1/customer - Создание клиента
PUT /api/v1/customer - Обновление клиента
GET /api/v1/customer - Получение всех клиентов
GET /api/v1/customer/{id} - Получение клиента по ID
GET /api/v1/customer/exists/{id} - Проверка существования клиента
DELETE /api/v1/customer/{id} - Удаление клиента
GET /api/v1/products - Получение всех товаров
POST /api/v1/products/purchase - Покупка товаров
POST /api/v1/orders - Создание заказа
GET /api/v1/orders - Получение всех заказов
GET /api/v1/orders/{id} - Получение заказа по ID
POST /api/v1/payments - Создание платежа
application.yml- Общие настройки Eurekacustomer-service.yml- Настройки MongoDB для Customer Serviceproduct-service.yml- Настройки PostgreSQL для Product Servicediscovery-service.yml- Настройки Eureka Server
Основные настройки можно переопределить через переменные окружения:
# Database
POSTGRES_USER=qwe
POSTGRES_PASSWORD=qwe
POSTGRES_DB=postgres
# MongoDB
MONGO_INITDB_ROOT_USERNAME=qwe
MONGO_INITDB_ROOT_PASSWORD=qwe
# Config Server
CONFIG_SERVER_URL=http://localhost:8888
# Eureka
EUREKA_SERVER_URL=http://localhost:8761/eureka- Создание клиента:
curl -X POST http://localhost:8090/api/v1/customer \
-H "Content-Type: application/json" \
-d '{
"firstName": "Иван",
"lastName": "Иванов",
"email": "ivan@example.com",
"address": {
"street": "Улица Примерная",
"houseNumber": "123",
"zipCode": "12345"
}
}'- Создание заказа:
curl -X POST http://localhost:8080/api/v1/orders \
-H "Content-Type: application/json" \
-d '{
"reference": "ORD-001",
"amount": 99.99,
"paymentMethod": "CREDIT_CARD",
"customerId": "customer-id",
"products": [
{
"productId": 1,
"quantity": 2
}
]
}'-
Сервис не может подключиться к Config Server
- Убедитесь, что Config Server запущен первым
- Проверьте URL в application.yml
-
Ошибки подключения к базе данных
- Убедитесь, что Docker контейнеры запущены
- Проверьте параметры подключения в конфигурации
-
Сервисы не регистрируются в Eureka
- Убедитесь, что Discovery Service запущен
- Проверьте настройки eureka.client в конфигурации
-
Kafka сообщения не доставляются
- Убедитесь, что Kafka запущен (может потребоваться отдельная настройка)
- Проверьте конфигурацию топиков
- Добавить мониторинг (Prometheus, Grafana)
- Реализовать Circuit Breaker (Resilience4j)
- Добавить централизованное логирование (ELK Stack)
- Настроить CI/CD pipeline
- Добавить автоматические тесты
- Реализовать аутентификацию и авторизацию с помощью Keycloak
- Добавить Swagger документацию
- Оптимизировать производительность
- Абдулбасит Мануров - Разработчик - GitHub профиль