- 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
53 lines
3.0 KiB
Markdown
53 lines
3.0 KiB
Markdown
# 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
|