Примеры работы с топиком через SQS API
В этой статье приведены примеры работы с топиками с использованием SQS API с помощью AWS CLI.
Примечание
Работа с топиками по SQS-протоколу поддерживается только для Amazon JSON protocol.
Перед выполнением примеров настройте доступ к SQS API (в Open Source-версии — отключите требование аутентификации, см. раздел про аутентификацию).
Если вы используете AWS CLI, убедитесь, что он не требует настроенных AWS‑креденшалов: либо добавьте --no-sign-request к командам, либо задайте любые значения AWS_ACCESS_KEY_ID/AWS_SECRET_ACCESS_KEY.
Формирование endpoint для подключения
Endpoint для доступа к SQS API формируется следующим образом:
https://{db-balancer}:{port}/{database}
Где:
db-balancer— DNS-имя HTTPS-балансировщика, у которого в качестве backend указаны compute-ноды базы данных (или адрес узла/сервиса, где запущен HTTP Proxy);port— порт, на котором доступен HTTP Proxy;database— полный путь базы данных, в которой находятся топики.
Этот endpoint указывается в AWS CLI через параметр --endpoint.
Примечание
В примерах используется endpoint https://my_db.balancer.example.com:8443/Root/my_db. В нём:
my_db.balancer.example.com— DNS-имя балансировщика, по которому доступен SQS-протокол;8443— сетевой порт;/Root/my_db— имя базы данных.
Создание топика
Для создания топика выполните команду:
ENDPOINT="https://my_db.balancer.example.com:8443/Root/my_db"
aws --endpoint "$ENDPOINT" \
sqs create-queue --queue-name "my_topic"
После выполнения команды будет создан топик с указанным именем и разделяемым (общим) читателем с именем ydb-sqs-consumer. Проверить существование топика можно с помощью команды scheme describe YDB CLI:
ydb -e grpcs://my_db.balancer.example.com:2135 -d /Root/my_db scheme describe my_topic
Для создания FIFO-очереди используйте атрибут FifoQueue=true. Для FIFO-очередей рекомендуется заканчивать имя на .fifo, чтобы соответствовать соглашению об именовании Amazon SQS:
ENDPOINT="https://my_db.balancer.example.com:8443/Root/my_db"
aws --endpoint "$ENDPOINT" \
sqs create-queue \
--queue-name "my_topic.fifo" \
--attributes FifoQueue=true
После выполнения команды будет создан топик с именем my_topic.fifo и разделяемым (общим) читателем с именем ydb-sqs-consumer, у которого включено сохранение порядка сообщений.
Получение списка топиков
Для получения списка топиков, с которыми возможна работа по SQS протоколу, выполните команду:
ENDPOINT="https://my_db.balancer.example.com:8443/Root/my_db"
aws --endpoint "$ENDPOINT" sqs list-queues
Запись в топик и чтение из топика
Для операций чтения и записи AWS CLI использует параметр --queue-url. Его можно получить через get-queue-url.
Ниже приведён пример:
- получение
QueueUrl; - запись сообщения;
- чтение сообщения.
ENDPOINT="https://my_db.balancer.example.com:8443/Root/my_db"
# получить QueueUrl
QUEUE_URL="$(aws --endpoint "$ENDPOINT" sqs get-queue-url --queue-name "my_topic" --query 'QueueUrl' --output text)"
# записать сообщение в топик
aws --endpoint "$ENDPOINT" sqs send-message \
--queue-url "$QUEUE_URL" \
--message-body "hello from aws cli"
# прочитать сообщение (long polling)
aws --endpoint "$ENDPOINT" sqs receive-message \
--queue-url "$QUEUE_URL" \
--wait-time-seconds 20 \
--max-number-of-messages 1