5.9 KiB
5.9 KiB
Управление портами Cubenet Backend
📌 Выделение портов
Для обеспечения порядка и предотвращения конфликтов портов, используется следующая система выделения:
🔴 Зарезервированные порты
REST API (8000-8099)
8000 - API Gateway (REST + Swagger UI + OpenAPI docs)
8001 - API (Internal REST)
gRPC Internal (9000-9099)
9000 - [Зарезервирован для будущего использования]
Микросервисы (13000-14000)
13000 - TemplateService (Шаблон для новых сервисов) [НЕ ИСПОЛЬЗУЕТСЯ]
13001 - User Service ✓
13002 - [Доступно]
13003 - [Доступно]
...
14000 - [Доступно]
✅ Матрица микросервисов
| Порт | Сервис | Статус | Proto файл | Примечание |
|---|---|---|---|---|
| 13000 | Template Service | Шаблон | - | Используйте для создания новых сервисов |
| 13001 | User Service | ✓ Активен | user.proto | Пример реализации |
| 13002 | Product Service | [Доступен] | - | Пример: сервис продуктов |
| 13003 | Order Service | [Доступен] | - | Пример: сервис заказов |
| 13004 | Auth Service | [Доступен] | - | Пример: сервис аутентификации |
| 13005-14000 | Your Services | [Доступны] | - | Используйте эти порты для ваших сервисов |
🎯 Создание нового микросервиса
Шаг 1: Выбрать свободный порт
- Посмотрите матрицу выше
- Выберите первый свободный порт (например 13002)
- Обновите эту таблицу (пометьте как "✓ Активен")
Шаг 2: Создать структуру
# 1. Копировать шаблон
cp -r microservices/template_service microservices/product_service
# 2. Обновить Cargo.toml
# Измените:
# [package]
# name = "product_service"
# 3. Создать proto файл (shared_proto/proto/product.proto)
# 4. Обновить shared_proto/src/lib.rs
# 5. Обновить shared_proto/build.rs
# 6. Реализовать сервис
Шаг 3: Зарегистрировать в Workspace
# Cargo.toml (корневой)
[workspace]
members = [
"api_gateway",
"api",
"microservices/user_service",
"microservices/product_service", # ← Добавить
"shared_proto"
]
📋 Процедура добавления микросервиса
- Выбрать порт → Обновить таблицу выше
- Создать proto →
shared_proto/proto/my_service.proto - Обновить shared_proto → Добавить в
src/lib.rsиbuild.rs - Создать сервис →
microservices/my_service/ - Добавить в workspace → Обновить корневой
Cargo.toml - Протестировать →
cargo check && cargo build
🔍 Проверка свободных портов
Linux/Mac
# Проверить какой процесс на порту
lsof -i :13002
# Проверить все используемые порты
netstat -an | grep LISTEN
Windows
# Проверить порты
netstat -ano | findstr :13002
🚨 Правила выделения портов
✅ ДЕЛАЙТЕ:
- Выбирайте порты из диапазона 13000-14000 для микросервисов
- Обновляйте этот файл при добавлении нового сервиса
- Используйте шаблон (template_service) для новых сервисов
- Проверяйте что порт свободен перед запуском
❌ НЕ ДЕЛАЙТЕ:
- Не используйте зарезервированные порты (8000, 8001)
- Не переопределяйте уже выделенные порты
- Не запускайте несколько сервисов на одном порту
- Не используйте порты за пределами 13000-14000 для микросервисов
💡 Примеры
Пример 1: Product Service на 13002
# shared_proto/proto/product.proto
service ProductService {
rpc GetProduct(GetProductRequest) returns (Product);
}
// microservices/product_service/src/main.rs
let addr = "127.0.0.1:13002".parse()?;
Пример 2: Auth Service на 13004
# shared_proto/proto/auth.proto
service AuthService {
rpc Login(LoginRequest) returns (TokenResponse);
}
// microservices/auth_service/src/main.rs
let addr = "127.0.0.1:13004".parse()?;
📞 Команды для проверки
# Проверить запущенные сервисы
cargo run --list-targets
# Скомпилировать всё
cargo build
# Запустить конкретный сервис
cargo run -p user_service
# Проверить что порт слушается
grpcurl -plaintext localhost:13001 list
🔄 Обновление таблицы
Когда вы создаете новый микросервис:
| 13002 | Product Service | ✓ Активен | product.proto | Сервис управления продуктами |
📝 История добавления сервисов
| Дата | Сервис | Порт | Автор |
|---|---|---|---|
| 2024-11-19 | User Service | 13001 | Cubenet Team |
| - | - | - | - |
Обновляйте эту таблицу при добавлении новых сервисов!