// Создан: 2026-04-07 // elasticmq_config.go — генератор HOCON конфигурации для ElasticMQ. // Каждый тенант получает уникальный конфиг: свой context-path, accountId, persistence. // Конфиг монтируется в pod как ConfigMap → /opt/elasticmq/custom.conf. package elasticmq import "fmt" // GenerateConfig генерирует HOCON конфигурацию для ElasticMQ инстанса тенанта. // tenantID — ID тенанта (используется в context-path и accountId). // externalHost — публичный хост (SQS_EXTERNAL_HOST env var, например sqs.kube5s.ru). // persistence — если true, сообщения сохраняются в H2 на PVC /data. func GenerateConfig(tenantID, externalHost string, persistence bool) string { persistenceBlock := "" if persistence { // H2 база данных хранит очереди и сообщения между рестартами pod. // Файл /data/elasticmq.db — на PVC тенанта. persistenceBlock = ` messages-storage { enabled = true uri = "jdbc:h2:/data/elasticmq" }` } else { persistenceBlock = ` messages-storage { enabled = false }` } return fmt.Sprintf(`include classpath("application.conf") # Внешний адрес ноды — как будут формироваться queue URL в ответах SQS API. # context-path должен совпадать с путём в Ingress: /sqs/%s node-address { protocol = https host = %s port = 443 context-path = "/sqs/%s" } rest-sqs { enabled = true bind-port = 9324 bind-hostname = "0.0.0.0" # strict — соответствие AWS SQS валидации параметров sqs-limits = strict } %s # accountId = tenantID — используется в ARN очередей aws { region = ru-msk-1 accountId = "%s" } `, tenantID, externalHost, tenantID, persistenceBlock, tenantID) }