Files
shared-SQS/README.md
T

7.0 KiB

NGCloud Shared SQS — Multi-Tenant Message Queue Service

Совместимый с Amazon SQS мультитенантный сервис очередей сообщений.
Один кластер — много тенантов, каждый с изолированными очередями и credentials.

Демо-стенд

Web UI https://qu.kube5s.ru/ui/
SQS Endpoint https://qu.kube5s.ru
Access Key SSAK-demo-shared-sqs
Secret Key demo-secret-key-shared-sqs-ngcloud-2026
Region us-east-1 (любая)

Демо-тенант demo-service предустановлен с 5 очередями и сообщениями.
Credentials фиксированы — работают после любого рестарта стенда.


Быстрый старт

Настройка AWS CLI

export AWS_ACCESS_KEY_ID="SSAK-demo-shared-sqs"
export AWS_SECRET_ACCESS_KEY="demo-secret-key-shared-sqs-ngcloud-2026"
export AWS_DEFAULT_REGION="us-east-1"
ENDPOINT="--endpoint-url https://qu.kube5s.ru"

AWS CLI

Самый простой способ работы — через стандартный AWS CLI.

Установка

Linux / macOS (pip):

pip install awscli

Linux (пакет):

curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o awscliv2.zip
unzip awscliv2.zip && sudo ./aws/install

macOS (brew):

brew install awscli

Windows: скачайте установщик с https://aws.amazon.com/cli/

Проверка: aws --version

Создать очередь

aws sqs create-queue --queue-name myqueue $ENDPOINT

Список очередей

aws sqs list-queues $ENDPOINT

Отправить сообщение

aws sqs send-message \
  --queue-url "$(aws sqs get-queue-url --queue-name myqueue $ENDPOINT --query QueueUrl --output text)" \
  --message-body "Hello from CLI!" \
  $ENDPOINT

Получить сообщение

aws sqs receive-message \
  --queue-url "$(aws sqs get-queue-url --queue-name myqueue $ENDPOINT --query QueueUrl --output text)" \
  $ENDPOINT

Удалить очередь

aws sqs delete-queue \
  --queue-url "$(aws sqs get-queue-url --queue-name myqueue $ENDPOINT --query QueueUrl --output text)" \
  $ENDPOINT

Совет: --endpoint-url — единственное отличие от работы с Amazon SQS.
Весь остальной код без изменений.


curl

Создать очередь

curl -s -u "SSAK-demo-shared-sqs:demo-secret-key-shared-sqs-ngcloud-2026" \
  "https://qu.kube5s.ru/?Action=CreateQueue&QueueName=myqueue&Version=2012-11-05"

Отправить сообщение

curl -s -u "SSAK-demo-shared-sqs:demo-secret-key-shared-sqs-ngcloud-2026" \
  "https://qu.kube5s.ru/?Action=SendMessage&QueueUrl=https://qu.kube5s.ru/queue/myqueue&MessageBody=HelloWorld&Version=2012-11-05"

Получить сообщение

curl -s -u "SSAK-demo-shared-sqs:demo-secret-key-shared-sqs-ngcloud-2026" \
  "https://qu.kube5s.ru/?Action=ReceiveMessage&QueueUrl=https://qu.kube5s.ru/queue/myqueue&Version=2012-11-05"

Python (boto3)

import boto3

sqs = boto3.client(
    "sqs",
    endpoint_url="https://qu.kube5s.ru",
    region_name="us-east-1",
    aws_access_key_id="SSAK-demo-shared-sqs",
    aws_secret_access_key="demo-secret-key-shared-sqs-ngcloud-2026",
)

# Создать очередь
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)

const { SQSClient, CreateQueueCommand, SendMessageCommand, ReceiveMessageCommand } = require("@aws-sdk/client-sqs");

const sqs = new SQSClient({
  endpoint: "https://qu.kube5s.ru",
  region: "us-east-1",
  credentials: {
    accessKeyId: "SSAK-demo-shared-sqs",
    secretAccessKey: "demo-secret-key-shared-sqs-ngcloud-2026",
  },
});

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 — быстрая проверка

Требования: aws cli, bash

bash quick_test.sh

19 тестов: health, создание тенанта, CRUD через AWS CLI, UI API (создание/удаление очереди, send/peek/purge сообщений).

hardcore_test.sh — полный тест (AWS CLI + curl)

Требования: aws cli, curl, bash

bash hardcore_test.sh

28 групп тестов:

  • Admin API: создание, список, удаление тенантов
  • CRUD через AWS CLI и через curl
  • Кросс-доставка: CLI отправляет → curl получает (и наоборот)
  • Изоляция тенантов: тенант A не видит очереди тенанта B
  • Невалидный ввод: неавторизованный доступ, несуществующие очереди
  • Спецсимволы: JSON, XML-сущности, Unicode, эмодзи
  • Batch операции: SendMessageBatch, DeleteMessageBatch
  • Visibility timeout: сообщение скрыто → снова доступно
  • Лимиты: максимум очередей на тенанта
  • Load test: 20 сообщений throughput
  • Целостность: проверка MD5
  • Edge cases: длинные имена, большие сообщения, граничные параметры
  • UI API: создание/удаление очередей, send/peek/purge сообщений, изоляция

Особенности

  • Полная совместимость с Amazon SQS API — AWS SDK и CLI работают без изменений, только endpoint меняется
  • Мультитенантность — каждый тенант с изолированными credentials (Access Key / Secret Key) и лимитами
  • Изоляция — тенант видит только свои очереди, чужие недоступны
  • Web UI — визуальное управление тенантами и мониторинг очередей
  • Admin API — программное управление тенантами (создание, удаление, просмотр)
  • Batch операции — SendMessageBatch, DeleteMessageBatch для высокой пропускной способности