feat(shared-sqs): Redis write-through persistence, RollingUpdate deploy (v0.1.11)
This commit is contained in:
@@ -1,10 +1,11 @@
|
||||
// app/cmd/goaws.go
|
||||
// Entry point — shared-sqs server
|
||||
// Updated: 2026-04-09 — добавлены TenantStore, admin token, graceful shutdown (Trap #13)
|
||||
// Updated: 2026-04-10 — добавлена Redis persistence (write-through cache)
|
||||
package main
|
||||
|
||||
import (
|
||||
"context"
|
||||
"encoding/json"
|
||||
"flag"
|
||||
"net/http"
|
||||
"os"
|
||||
@@ -15,6 +16,7 @@ import (
|
||||
"shared-sqs/app/conf"
|
||||
"shared-sqs/app/gosqs"
|
||||
"shared-sqs/app/models"
|
||||
"shared-sqs/app/persistence"
|
||||
"shared-sqs/app/router"
|
||||
"shared-sqs/app/tenant"
|
||||
|
||||
@@ -77,6 +79,47 @@ func main() {
|
||||
|
||||
// Инициализация in-memory TenantStore
|
||||
tenantStore := tenant.NewTenantStore()
|
||||
|
||||
// Подключение к Redis (если задан REDIS_ADDR)
|
||||
// При ошибке — предупреждение, но продолжаем в memory-only режиме
|
||||
redisAddr := os.Getenv("REDIS_ADDR")
|
||||
redisUser := os.Getenv("REDIS_USER")
|
||||
redisPass := os.Getenv("REDIS_PASSWORD")
|
||||
if redisAddr != "" {
|
||||
if err := persistence.Connect(redisAddr, redisUser, redisPass); err != nil {
|
||||
log.Warnf("Не удалось подключиться к Redis: %v — работаем в memory-only режиме", err)
|
||||
}
|
||||
}
|
||||
|
||||
// Восстановление состояния из Redis (тенанты + очереди)
|
||||
if persistence.Client != nil {
|
||||
// Загружаем тенантов
|
||||
tenantsRaw, err := persistence.LoadAllTenantsRaw()
|
||||
if err != nil {
|
||||
log.Warnf("Ошибка загрузки тенантов из Redis: %v", err)
|
||||
} else {
|
||||
for _, jsonBytes := range tenantsRaw {
|
||||
var t tenant.Tenant
|
||||
if err := json.Unmarshal(jsonBytes, &t); err != nil {
|
||||
log.Errorf("Ошибка десериализации тенанта: %v", err)
|
||||
continue
|
||||
}
|
||||
tenantStore.LoadTenant(&t)
|
||||
}
|
||||
}
|
||||
// Загружаем очереди
|
||||
queues, err := persistence.LoadAllQueues()
|
||||
if err != nil {
|
||||
log.Warnf("Ошибка загрузки очередей из Redis: %v", err)
|
||||
} else {
|
||||
models.SyncQueues.Lock()
|
||||
for k, q := range queues {
|
||||
models.SyncQueues.Queues[k] = q
|
||||
}
|
||||
models.SyncQueues.Unlock()
|
||||
}
|
||||
}
|
||||
|
||||
// Автосид демо-данных при SHARED_SQS_SEED_DEMO=true
|
||||
if os.Getenv("SHARED_SQS_SEED_DEMO") == "true" {
|
||||
seedDemoData(tenantStore)
|
||||
|
||||
Reference in New Issue
Block a user