feat: add 4 missing SQS API commands for Yandex/AWS compatibility
- ChangeMessageVisibilityBatch: batch visibility timeout (up to 10 msgs) - TagQueue: add/update queue tags - UntagQueue: remove queue tags by keys - ListQueueTags: list all queue tags - Added Tags field to Queue struct - Request/Response models for all 4 commands - Registered in router (17 total API commands now) - Yandex Message Queue API reference doc
This commit is contained in:
@@ -0,0 +1,52 @@
|
||||
# Thinking Log — 2026-04-11
|
||||
# Agent: GitHub Copilot (Claude Opus 4.6)
|
||||
|
||||
---
|
||||
|
||||
## Задача: Добавить 4 недостающие API команды для совместимости с Yandex/AWS SQS
|
||||
|
||||
### Контекст
|
||||
Пользователь скопировал всю документацию Yandex Message Queue API (16 команд).
|
||||
Сравнение показало, что у нас реализовано 13 из 16. Не хватает:
|
||||
- ChangeMessageVisibilityBatch
|
||||
- TagQueue
|
||||
- UntagQueue
|
||||
- ListQueueTags
|
||||
|
||||
### Анализ
|
||||
1. **ChangeMessageVisibilityBatch** — паттерн полностью аналогичен DeleteMessageBatch:
|
||||
- Валидация: пустой batch, >10 entries, дублирование Id
|
||||
- Partial success: отдельно Successful и Failed массивы
|
||||
- Логика: цикл по ChangeMessageVisibility для каждого Entry
|
||||
|
||||
2. **Tag-операции** — требуют добавления `Tags map[string]string` в Queue struct:
|
||||
- TagQueue: merge tags (новый ключ перезаписывает старый)
|
||||
- UntagQueue: delete по списку ключей
|
||||
- ListQueueTags: read-only, RLock достаточно
|
||||
- Persistence: SaveQueue после изменения tags (TagQueue, UntagQueue)
|
||||
|
||||
3. **Юридический вопрос** — пользователь спросил про авторские права.
|
||||
Ответ: API интерфейс не защищён (Oracle v. Google 2021). Yandex сам реализует AWS SQS API.
|
||||
Десятки компаний делают то же самое (ElasticMQ, LocalStack, MinIO).
|
||||
|
||||
### Решения
|
||||
- Добавил поле `Tags map[string]string` в Queue struct — минимально инвазивное изменение
|
||||
- Для старых очередей (без Tags) — nil-safe: проверка `if queue.Tags == nil` перед операциями
|
||||
- ListQueueTags использует RLock (не Lock) — read-only операция
|
||||
- ChangeMessageVisibilityBatch НЕ персистит в Redis (аналогично одиночному ChangeMessageVisibility)
|
||||
- TagQueue/UntagQueue персистят через SaveQueue (tags — часть конфигурации очереди)
|
||||
|
||||
### Что создано
|
||||
- `app/gosqs/change_message_visibility_batch.go` — ~120 строк
|
||||
- `app/gosqs/tag_queue.go` — ~70 строк
|
||||
- `app/gosqs/untag_queue.go` — ~65 строк
|
||||
- `app/gosqs/list_queue_tags.go` — ~65 строк
|
||||
- Модели request/response в `app/models/requests.go` и `app/models/responses.go`
|
||||
- Routing в `app/router/router.go`
|
||||
- Поле `Tags` в `app/models/models.go` Queue struct
|
||||
|
||||
### Итого API команд: 17
|
||||
Полный список: CreateQueue, DeleteQueue, GetQueueAttributes, GetQueueUrl, ListQueues,
|
||||
PurgeQueue, SetQueueAttributes, SendMessage, SendMessageBatch, ReceiveMessage,
|
||||
DeleteMessage, DeleteMessageBatch, ChangeMessageVisibility, ChangeMessageVisibilityBatch,
|
||||
TagQueue, UntagQueue, ListQueueTags
|
||||
Reference in New Issue
Block a user