212 lines
6.2 KiB
Markdown
212 lines
6.2 KiB
Markdown
# shared-SQS — AWS SQS Compatible Message Queue
|
||
|
||
Совместимый с Amazon SQS сервис очередей сообщений с поддержкой изолированных тенантов.
|
||
|
||
Сервис предназначен для работы через стандартные AWS SDK и AWS CLI: в обычном клиентском коде меняется только endpoint.
|
||
|
||
## Демо-стенд
|
||
|
||
| | |
|
||
|---|---|
|
||
| Web UI | https://qu.kube5s.ru/ui/ |
|
||
| SQS Endpoint | https://qu.kube5s.ru |
|
||
| Region | us-east-1 |
|
||
| Demo Access Key | SSAK-demo-shared-sqs |
|
||
| Demo Secret Key | demo-secret-key-shared-sqs-ngcloud-2026 |
|
||
|
||
Demo credentials предназначены для ознакомительного доступа.
|
||
Для собственных write-сценариев используйте tenant credentials своего окружения.
|
||
|
||
## Что поддерживается
|
||
|
||
shared-SQS покрывает 17 SQS-операций:
|
||
|
||
- CreateQueue
|
||
- DeleteQueue
|
||
- GetQueueAttributes
|
||
- GetQueueUrl
|
||
- ListQueues
|
||
- PurgeQueue
|
||
- SetQueueAttributes
|
||
- TagQueue
|
||
- UntagQueue
|
||
- ListQueueTags
|
||
- SendMessage
|
||
- SendMessageBatch
|
||
- ReceiveMessage
|
||
- DeleteMessage
|
||
- DeleteMessageBatch
|
||
- ChangeMessageVisibility
|
||
- ChangeMessageVisibilityBatch
|
||
|
||
## Где взять ключи
|
||
|
||
Есть два варианта:
|
||
|
||
### 1. Ознакомительный доступ
|
||
|
||
Для простого знакомства можно использовать demo credentials из блока выше:
|
||
|
||
```bash
|
||
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"
|
||
```
|
||
|
||
### 2. Собственные tenant credentials
|
||
|
||
Если нужен полноценный доступ для своих очередей и сообщений, используйте credentials своего тенанта.
|
||
Это обычная пара Access Key / Secret Key, выданная для вашего tenant.
|
||
|
||
Примеры ниже работают в обоих режимах: с demo credentials и с собственными tenant credentials.
|
||
|
||
## Где взять ключи
|
||
|
||
Есть два варианта:
|
||
|
||
### 1. Ознакомительный доступ
|
||
|
||
Для простого знакомства можно использовать demo credentials из блока выше:
|
||
|
||
```bash
|
||
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"
|
||
```
|
||
|
||
### 2. Собственные tenant credentials
|
||
|
||
Если нужен полноценный доступ для своих очередей и сообщений, используйте credentials своего тенанта.
|
||
Это обычная пара Access Key / Secret Key, выданная для вашего tenant.
|
||
|
||
Примеры ниже работают в обоих режимах: с demo credentials и с собственными tenant credentials.
|
||
|
||
## Быстрый старт через AWS CLI
|
||
|
||
```bash
|
||
export AWS_ACCESS_KEY_ID="YOUR_ACCESS_KEY"
|
||
export AWS_SECRET_ACCESS_KEY="YOUR_SECRET_KEY"
|
||
export AWS_DEFAULT_REGION="us-east-1"
|
||
ENDPOINT="--endpoint-url https://qu.kube5s.ru"
|
||
```
|
||
|
||
### Создать очередь
|
||
|
||
```bash
|
||
aws sqs create-queue --queue-name demo-queue $ENDPOINT
|
||
```
|
||
|
||
### Получить URL очереди
|
||
|
||
```bash
|
||
aws sqs get-queue-url --queue-name demo-queue $ENDPOINT
|
||
```
|
||
|
||
### Отправить сообщение
|
||
|
||
```bash
|
||
QUEUE_URL=$(aws sqs get-queue-url --queue-name demo-queue $ENDPOINT --query QueueUrl --output text)
|
||
aws sqs send-message --queue-url "$QUEUE_URL" --message-body "Hello from shared-SQS" $ENDPOINT
|
||
```
|
||
|
||
### Получить сообщение
|
||
|
||
```bash
|
||
aws sqs receive-message --queue-url "$QUEUE_URL" --wait-time-seconds 5 $ENDPOINT
|
||
```
|
||
|
||
### Удалить очередь
|
||
|
||
```bash
|
||
aws sqs delete-queue --queue-url "$QUEUE_URL" $ENDPOINT
|
||
```
|
||
|
||
## Python (boto3)
|
||
|
||
```python
|
||
import boto3
|
||
|
||
sqs = boto3.client(
|
||
"sqs",
|
||
endpoint_url="https://qu.kube5s.ru",
|
||
region_name="us-east-1",
|
||
aws_access_key_id="YOUR_ACCESS_KEY",
|
||
aws_secret_access_key="YOUR_SECRET_KEY",
|
||
)
|
||
|
||
queue = sqs.create_queue(QueueName="demo-queue")
|
||
queue_url = queue["QueueUrl"]
|
||
|
||
sqs.send_message(QueueUrl=queue_url, MessageBody="Hello from Python")
|
||
messages = sqs.receive_message(QueueUrl=queue_url, WaitTimeSeconds=5)
|
||
print(messages)
|
||
```
|
||
|
||
## Node.js (@aws-sdk/client-sqs)
|
||
|
||
```javascript
|
||
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: "YOUR_ACCESS_KEY",
|
||
secretAccessKey: "YOUR_SECRET_KEY",
|
||
},
|
||
});
|
||
|
||
const queue = await sqs.send(new CreateQueueCommand({ QueueName: "demo-queue" }));
|
||
await sqs.send(new SendMessageCommand({ QueueUrl: queue.QueueUrl, MessageBody: "Hello" }));
|
||
const result = await sqs.send(new ReceiveMessageCommand({ QueueUrl: queue.QueueUrl, WaitTimeSeconds: 5 }));
|
||
console.log(result.Messages);
|
||
```
|
||
|
||
## Тесты
|
||
|
||
### quick_test.sh
|
||
|
||
Короткий smoke test основных операций:
|
||
|
||
```bash
|
||
AWS_ACCESS_KEY_ID=... AWS_SECRET_ACCESS_KEY=... bash quick_test.sh
|
||
```
|
||
|
||
Проверяет базовый lifecycle очереди и сообщения:
|
||
- CreateQueue
|
||
- ListQueues
|
||
- GetQueueUrl
|
||
- SendMessage
|
||
- ReceiveMessage
|
||
- DeleteMessage
|
||
- DeleteQueue
|
||
|
||
### hardcore_test.sh
|
||
|
||
Расширенный compatibility test:
|
||
|
||
```bash
|
||
AWS_ACCESS_KEY_ID=... AWS_SECRET_ACCESS_KEY=... bash hardcore_test.sh
|
||
```
|
||
|
||
Покрывает все 17 SQS-операций, включая:
|
||
- queue attributes
|
||
- tags
|
||
- batch операции
|
||
- visibility timeout
|
||
- purge
|
||
- queue lifecycle
|
||
|
||
## Сравнительные тесты
|
||
|
||
Краткий пользовательский summary лежит в файле `BENCHMARK-COMPARISON.md`.
|
||
|
||
Ключевой вывод: shared-SQS показывает конкурентоспособные результаты относительно Yandex MQ и покрывает полный набор заявленных пользовательских сценариев.
|