Files
SQS/README.md
T

176 lines
5.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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.
```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
```
Что проверяет:
1. Создание очереди
2. Очередь видна в списке
3. Отправка сообщения
4. Получение сообщения (тело совпадает)
5. Удаление очереди
6. Очередь исчезла из списка
Ожидаемый вывод:
```
=== SQS Quick Test ===
✅ Создание очереди
✅ Очередь в списке
✅ Отправка сообщения
✅ Получение сообщения
✅ Удаление очереди
✅ Очередь удалена из списка
Результат: 6 OK / 0 FAIL
Всё работает!
```
---
## Особенности
- **Полная совместимость с Amazon SQS API** — AWS SDK и CLI работают без изменений, только endpoint меняется
- **Физическая изоляция** — каждый тенант получает отдельный pod, namespace, диск
- **Persistence** — данные сохраняются при перезапуске
- **Web UI** — визуальное управление очередями