# NGCloud SQS — Managed Message Queue Service Совместимый с Amazon SQS сервис очередей сообщений на базе [ElasticMQ](https://github.com/softwaremill/elasticmq). ## Демо-стенд | | | |---|---| | **Web UI** | https://sqs.kube5s.ru/ | | **SQS Endpoint** | `https://sqs.kube5s.ru/sqs/test001` | | **Access Key** | `SQSAK-test001-ae4dc8` | | **Secret Key** | `J8mElXq8Nwww8iFRtGJCm8KfxM9XSTluTqS2A67xsEE` | | **Region** | `us-east-1` (любая) | --- ## AWS CLI Самый простой способ работы — через стандартный AWS CLI. ### Установка **Linux / macOS (pip):** ```bash pip install awscli ``` **Linux (пакет):** ```bash curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o awscliv2.zip unzip awscliv2.zip && sudo ./aws/install ``` **macOS (brew):** ```bash brew install awscli ``` **Windows:** скачайте установщик с https://aws.amazon.com/cli/ Проверка: `aws --version` ### Настройка ```bash export AWS_ACCESS_KEY_ID="SQSAK-test001-ae4dc8" export AWS_SECRET_ACCESS_KEY="J8mElXq8Nwww8iFRtGJCm8KfxM9XSTluTqS2A67xsEE" export AWS_DEFAULT_REGION="us-east-1" ENDPOINT="--endpoint-url https://sqs.kube5s.ru/sqs/test001" ``` ### Создать очередь ```bash aws sqs create-queue --queue-name myqueue $ENDPOINT ``` ### Список очередей ```bash aws sqs list-queues $ENDPOINT ``` ### Отправить сообщение ```bash aws sqs send-message \ --queue-url https://sqs.kube5s.ru:443/sqs/test001/test001/myqueue \ --message-body "Hello from CLI!" \ $ENDPOINT ``` ### Получить сообщение ```bash aws sqs receive-message \ --queue-url https://sqs.kube5s.ru:443/sqs/test001/test001/myqueue \ $ENDPOINT ``` ### Удалить очередь ```bash aws sqs delete-queue \ --queue-url https://sqs.kube5s.ru:443/sqs/test001/test001/myqueue \ $ENDPOINT ``` > **Совет:** `--endpoint-url` — единственное отличие от работы с Amazon SQS. Весь остальной код без изменений. --- ## curl ### Создать очередь ```bash curl -s -u "SQSAK-test001-ae4dc8:J8mElXq8Nwww8iFRtGJCm8KfxM9XSTluTqS2A67xsEE" \ "https://sqs.kube5s.ru/sqs/test001?Action=CreateQueue&QueueName=myqueue&Version=2012-11-05" ``` ### Отправить сообщение ```bash curl -s -u "SQSAK-test001-ae4dc8:J8mElXq8Nwww8iFRtGJCm8KfxM9XSTluTqS2A67xsEE" \ "https://sqs.kube5s.ru/sqs/test001?Action=SendMessage&QueueUrl=https://sqs.kube5s.ru/sqs/test001/test001/myqueue&MessageBody=HelloWorld&Version=2012-11-05" ``` ### Получить сообщение ```bash curl -s -u "SQSAK-test001-ae4dc8:J8mElXq8Nwww8iFRtGJCm8KfxM9XSTluTqS2A67xsEE" \ "https://sqs.kube5s.ru/sqs/test001?Action=ReceiveMessage&QueueUrl=https://sqs.kube5s.ru/sqs/test001/test001/myqueue&Version=2012-11-05" ``` --- ## Python (boto3) ```python import boto3 sqs = boto3.client( "sqs", endpoint_url="https://sqs.kube5s.ru/sqs/test001", region_name="us-east-1", aws_access_key_id="SQSAK-test001-ae4dc8", aws_secret_access_key="J8mElXq8Nwww8iFRtGJCm8KfxM9XSTluTqS2A67xsEE", ) # Создать очередь queue = sqs.create_queue(QueueName="myqueue") print(queue["QueueUrl"]) # Отправить сообщение sqs.send_message(QueueUrl=queue["QueueUrl"], MessageBody="Hello from Python!") # Получить сообщение msgs = sqs.receive_message(QueueUrl=queue["QueueUrl"]) print(msgs["Messages"][0]["Body"]) ``` --- ## Node.js (@aws-sdk/client-sqs) ```js const { SQSClient, CreateQueueCommand, SendMessageCommand, ReceiveMessageCommand } = require("@aws-sdk/client-sqs"); const sqs = new SQSClient({ endpoint: "https://sqs.kube5s.ru/sqs/test001", region: "us-east-1", credentials: { accessKeyId: "SQSAK-test001-ae4dc8", secretAccessKey: "J8mElXq8Nwww8iFRtGJCm8KfxM9XSTluTqS2A67xsEE", }, }); const queue = await sqs.send(new CreateQueueCommand({ QueueName: "myqueue" })); await sqs.send(new SendMessageCommand({ QueueUrl: queue.QueueUrl, MessageBody: "Hello!" })); const res = await sqs.send(new ReceiveMessageCommand({ QueueUrl: queue.QueueUrl })); console.log(res.Messages[0].Body); ``` --- ## Тесты В репозитории три тестовых скрипта — от простого к сложному. ### quick_test.sh — быстрая проверка **Требования:** `curl`, `bash` ```bash bash quick_test.sh ``` Проверяет 6 базовых операций: создание очереди → список → отправка → получение → удаление → проверка удаления. ### hardcore_test.sh — полный тест (AWS CLI + curl) **Требования:** `aws cli`, `curl`, `bash` ```bash bash hardcore_test.sh ``` 25 тестов в 8 группах: - CRUD через AWS CLI и через curl - Кросс-доставка: CLI отправляет → curl получает (и наоборот) - Невалидный ввод: несуществующие очереди, пустые параметры, неизвестные команды - Спецсимволы: JSON, XML-сущности, Unicode, эмодзи - Visibility timeout: сообщение скрыто → снова доступно - Множественная доставка: 10 сообщений без потерь - Целостность: проверка MD5 ### load_test.sh — нагрузочный тест **Требования:** `curl`, `bash` ```bash bash load_test.sh ``` Замеряет производительность сервиса: - Latency: средний/мин/макс для send и receive (20 замеров) - Последовательный throughput: 50 сообщений подряд - Параллельная работа: 5 воркеров × 20 сообщений одновременно - Стресс-петля: непрерывная отправка и получение 30 секунд --- ## Особенности - **Полная совместимость с Amazon SQS API** — AWS SDK и CLI работают без изменений, только endpoint меняется - **Физическая изоляция** — каждый тенант получает отдельный pod, namespace, диск - **Persistence** — данные сохраняются при перезапуске - **Web UI** — визуальное управление очередями