Этот сервис — универсальный API-шлюз и балансировщик для микросервисов. Он:
- Хранит конфигурацию сервисов (IP, порт, health-check, команда запуска) в файле
config.json. - Каждые 5 секунд проверяет доступность сервисов (health-check).
- Если сервис не отвечает — автоматически пытается его поднять (например, через docker-compose).
- Работает в вечном цикле и не завершает работу.
- Клонируйте репозиторий и перейдите в папку проекта
- Настройте файл конфигурации сервисов (см. ниже)
- Запустите API-шлюз:
# Установите зависимости
go mod tidy
# Запустите API
go run main.go{
"services": [
{
"name": "auth",
"ip": "127.0.0.1",
"port": 8080,
"health_check": "/health",
"start_cmd": "docker-compose up -d auth"
},
{
"name": "tracks",
"ip": "127.0.0.1",
"port": 8081,
"health_check": "/health",
"start_cmd": "docker-compose up -d tracks"
}
]
}name— уникальное имя сервисаip— IP-адрес сервисаport— порт сервисаhealth_check— endpoint для проверки работоспособности (например,/health)start_cmd— команда для запуска сервиса (например, команда docker-compose)
- Добавьте объект сервиса в массив
servicesвconfig.json. - Укажите корректные IP, порт, health-check и команду запуска.
- Перезапустите API-шлюз (или просто обновите config.json — мониторинг подхватит изменения при перезапуске).
- Каждые 5 секунд шлюз отправляет HTTP GET-запрос на health-check endpoint каждого сервиса.
- Если сервис не отвечает (ошибка или не 200 OK) — выполняется команда из
start_cmdдля попытки поднять сервис. - Все действия логируются в консоль.
Загружена конфигурация сервисов: &{...}
Микросервис: auth, адрес: 127.0.0.1:8080
Микросервис: tracks, адрес: 127.0.0.1:8081
Сервис auth работает нормально
Сервис tracks не отвечает. Пытаюсь поднять...
Пытаюсь поднять сервис tracks: docker-compose up -d tracks
- Go 1.18+
- Для автозапуска сервисов должны быть установлены все необходимые утилиты (например, docker-compose)
Q: Какой endpoint должен быть у health-check?
A: Любой, который возвращает 200 OK, если сервис жив (например, /health).
Q: Можно ли запускать не через docker-compose?
A: Да, укажите любую shell-команду в start_cmd (например, запуск бинарника или скрипта).
Q: Как добавить новый сервис?
A: Просто добавьте его в config.json и перезапустите шлюз.
Q: Как изменить интервал проверки?
A: Измените значение в main.go (по умолчанию 5 секунд).
main.go— основной код API-шлюза и балансировщикаconfig.json— конфигурация сервисовdocker-compose.yml— пример для запуска сервисов через Docker
Если возникли вопросы — создайте issue или напишите в Telegram: @your_nick
SoundRush Microservices API — быстро, надёжно, удобно!