- 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
3.0 KiB
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
Анализ
-
ChangeMessageVisibilityBatch — паттерн полностью аналогичен DeleteMessageBatch:
- Валидация: пустой batch, >10 entries, дублирование Id
- Partial success: отдельно Successful и Failed массивы
- Логика: цикл по ChangeMessageVisibility для каждого Entry
-
Tag-операции — требуют добавления
Tags map[string]stringв Queue struct:- TagQueue: merge tags (новый ключ перезаписывает старый)
- UntagQueue: delete по списку ключей
- ListQueueTags: read-only, RLock достаточно
- Persistence: SaveQueue после изменения tags (TagQueue, UntagQueue)
-
Юридический вопрос — пользователь спросил про авторские права. Ответ: 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.goQueue struct
Итого API команд: 17
Полный список: CreateQueue, DeleteQueue, GetQueueAttributes, GetQueueUrl, ListQueues, PurgeQueue, SetQueueAttributes, SendMessage, SendMessageBatch, ReceiveMessage, DeleteMessage, DeleteMessageBatch, ChangeMessageVisibility, ChangeMessageVisibilityBatch, TagQueue, UntagQueue, ListQueueTags