Микросервисный проект на Nest.js: producer публикует события в RabbitMQ, consumer обрабатывает их с ретраями/идемпотентностью и отправляет уведомления в Telegram.
- Node.js 20+, Nest.js 11
- RabbitMQ (publisher confirms, manual ack/nack, retry, DLQ)
- Telegram Bot API (sendMessage)
- Swagger для producer API
- Jest (unit + e2e)
- Docker & Docker Compose
apps/
producer-service/
src/
events/ -> HTTP endpoint /events
rabbit/ -> Publisher in RabbitMQ
consumer-service/
src/
rabbit/ -> Consumer with ack/nack/retries
telegram/ -> Telegram notification sender
libs/
common/src/
dto/ -> shared DTO
events/ -> event envelope
idempotency/ -> in-memory idempotency store
docker-compose.yml
Makefile
cp .env.example .env
docker compose --env-file .env up --build- Producer API:
http://localhost:3000 - Swagger:
http://localhost:3000/docs - RabbitMQ UI:
http://localhost:15672(guest/guest)
| Метод | Путь | Описание |
|---|---|---|
| POST | /events |
Публикация события в RabbitMQ |
| GET | /health |
Health check producer |
Пример POST /events:
{
"eventType": "order.created",
"payload": {
"orderId": "123",
"amount": 500
},
"meta": {
"source": "manual-test"
}
}npm run build
npm run test
npm run test:e2e
npm run lintИли через Makefile:
make build
make test
make test-e2e
make up
make down| Переменная | По умолчанию | Описание |
|---|---|---|
PRODUCER_PORT |
3000 |
Порт producer API |
RABBITMQ_URL |
amqp://guest:guest@rabbitmq:5672/ |
Подключение к RabbitMQ |
TELEGRAM_BOT_TOKEN |
- | Токен Telegram бота |
TELEGRAM_CHAT_ID |
- | ID чата для уведомлений |