Files
SQS-service/doc/thinking/2026-04-11.md
T
Naeel fbecde72eb 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
2026-04-11 07:51:17 +03:00

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

Анализ

  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