doc: QueueUrl исправлен (ExternalURLBase) + ошибки по пути; дефект снят

This commit is contained in:
Repinoid
2026-10-10 14:04:04 +03:00
parent c011099224
commit cf369736a0
2 changed files with 30 additions and 10 deletions
+13 -5
View File
@@ -81,6 +81,17 @@
(квинтет: `iot.kube5s.ru`→`iot.nubes.ru`, `qu.kube5s.ru`×3→`sqs.containerk8s.dev.nubes.ru`), (квинтет: `iot.kube5s.ru`→`iot.nubes.ru`, `qu.kube5s.ru`×3→`sqs.containerk8s.dev.nubes.ru`),
коммит `a47743f`. В `doc/legacy/` (история) не трогал. коммит `a47743f`. В `doc/legacy/` (история) не трогал.
### 2.10. Фикс QueueUrl (кодинг)
- Проблема: `QueueUrl` = `http://region.host:port/...` (плейсхолдеры) — клиенты без `endpoint_url` сломаны.
- Реализовано: `Environment.ExternalURLBase` + env `SHARED_SQS_EXTERNAL_URL_BASE`.
- **Ошибка по пути №1:** env-override сначала поместил после `models.CurrentEnvironment = envs[env]`
— не сработал: `LoadYamlConfig` делает ранний `return` без `goaws.yaml`. Перенёс в
`applyEnvironmentDefaults` (вызывается через defer → всегда).
- **Ошибка по пути №2:** после переноса всё равно не работало — демо-seed (`app/cmd/seed.go`) собирал
URL **своей копией** логики, а не через `tenantQueueURL`. Вынес `gosqs.TenantQueueURL`, seed переведён на него.
- Коммиты `469132b`, `ca0372b`; тест `app/gosqs/tenant_helpers_test.go`. Проверено снаружи:
`list-queues` → `https://sqs.sinefo.ru/t-.../orders`.
## 3. Грабли (для повторного использования) ## 3. Грабли (для повторного использования)
1. **`proxy_set_header Host $host` теряет порт** → SigV4 `SignatureDoesNotMatch`. 1. **`proxy_set_header Host $host` теряет порт** → SigV4 `SignatureDoesNotMatch`.
@@ -110,9 +121,7 @@
### 5.1. Итоговое состояние ### 5.1. Итоговое состояние
- **Работает:** `https://sqs.sinefo.ru` (443, TLS) → shared-sqs на ВМ 213 (memory-only, `127.0.0.1:4100`). - **Работает:** `https://sqs.sinefo.ru` (443, TLS) → shared-sqs на ВМ 213 (memory-only, `127.0.0.1:4100`).
- SQS: `~/sqs-test/shared-sqs`, лог `~/sqs-test/sqs.log`, pid меняется. Демо-тенант + 5 очередей. - SQS: `~/sqs-test/shared-sqs`, лог `~/sqs-test/sqs.log`, pid меняется. Демо-тенант + 5 очередей.
- **Дефект:** `QueueUrl` в ответах = `http://region.host:port/<tenant>/<queue>` — реального хоста нет - **QueueUrl — ИСПРАВЛЕНО** (см. 2.10): `https://sqs.sinefo.ru/<tenantID>/<queue>`.
(следствие отсутствия `goaws.yaml`). Клиенты **с** `endpoint_url` не страдают (берут только путь),
клиенты **без** него — сломаны. См. открытый вопрос 6.1.
### 5.2. Как поднять заново ### 5.2. Как поднять заново
```bash ```bash
@@ -134,7 +143,6 @@ pkill -x shared-sqs
## 6. Открытые вопросы ## 6. Открытые вопросы
1. `QueueUrl` — внешний хост (`https://sqs.sinefo.ru`): нужен ли фикс формата (схема/host/порт) 1. Клиенты без явного `endpoint_url` — есть ли такие (вопрос №5 мануала). `QueueUrl` уже корректный.
и есть ли клиенты без явного `endpoint_url` (вопрос №5 мануала).
2. Egress ВМ: `curl https://api.ipify.org` с ВМ вернул пусто — влияет на billing (PG) и JWT-API. 2. Egress ВМ: `curl https://api.ipify.org` с ВМ вернул пусто — влияет на billing (PG) и JWT-API.
3. Дальше по мануалу: Шаг 2 (разбиение data-plane/control-plane), Шаг 3 (вынос состояния). 3. Дальше по мануалу: Шаг 2 (разбиение data-plane/control-plane), Шаг 3 (вынос состояния).
@@ -87,9 +87,21 @@ grep "seed: создан тенант" ~/sqs-test/sqs.log | tail -1
curl -sS https://sqs.sinefo.ru/health curl -sS https://sqs.sinefo.ru/health
``` ```
## 7. Известный дефект ## 7. QueueUrl — ИСПРАВЛЕНО (2026-10-10)
`QueueUrl` в ответах = `http://region.host:port/<tenantID>/<queue>` (плейсхолдеры — нет `goaws.yaml`). **Было:** `QueueUrl` = `http://region.host:port/<tenantID>/<queue>` (плейсхолдеры — на ВМ нет `goaws.yaml`).
Причина: `app/gosqs/tenant_helpers.go:29-37` (схема `http://`, формат `{region}.{host}:{port}`;
Host/Port/Region только из `app/conf/goaws.yaml`, env-переменных нет). Клиенты с `endpoint_url` **Стало:** база URL задаётся через `ExternalURLBase` (config `goaws.yaml` **или** env
не страдают (используют путь), клиенты без него — сломаны. `SHARED_SQS_EXTERNAL_URL_BASE`). На ВМ запускается с `SHARED_SQS_EXTERNAL_URL_BASE=https://sqs.sinefo.ru` →
`QueueUrl` = `https://sqs.sinefo.ru/<tenantID>/<queue>` (проверено снаружи).
Изменения (коммиты `469132b`, `ca0372b`):
- `app/models/configuration.go` — поле `Environment.ExternalURLBase`;
- `app/gosqs/tenant_helpers.go` — `tenantQueueURL` учитывает `ExternalURLBase`; добавлена
экспортированная `TenantQueueURL`;
- `app/conf/config.go` — env-override `SHARED_SQS_EXTERNAL_URL_BASE` в `applyEnvironmentDefaults`
(срабатывает и при отсутствии `goaws.yaml` — важная тонкость: `LoadYamlConfig` делает ранний
`return` без конфига, поэтому override там не срабатывал);
- `app/cmd/seed.go` — демо-очереди формируют URL через `gosqs.TenantQueueURL` (убрано
дублирование логики — оно и было причиной, что фикс «не применялся»);
- тест `app/gosqs/tenant_helpers_test.go`.