Skip to content

EgoBrainProgrammer/rabbit-mq

Repository files navigation

RabbitMQ Telegram Notifications

Nest.js проект с двумя сервисами:

  • producer принимает HTTP-запросы, создает событие с UUID/idempotency key и публикует JSON в RabbitMQ с publisher confirms и ретраями.
  • consumer читает очередь RabbitMQ, вручную подтверждает обработку, повторно отправляет ошибки через retry-очередь и после лимита переносит сообщения в DLQ.
  • TelegramNotificationService отправляет обработанные события в Telegram Bot API.

Запуск через Docker

Copy-Item .env.example .env
docker compose up --build

Producer API: http://localhost:3000 Swagger: http://localhost:3000/docs RabbitMQ UI: http://localhost:15672 (guest / guest)

Для реальной отправки в Telegram укажите в .env:

TELEGRAM_ENABLED=true
TELEGRAM_BOT_TOKEN=123456:bot-token
TELEGRAM_CHAT_ID=123456789

Без этих значений consumer обработает событие как успешное, но отправка в Telegram будет отключена.

Пример события

Invoke-RestMethod -Method Post http://localhost:3000/events `
  -ContentType 'application/json' `
  -Body '{
    "type": "order.created",
    "payload": {
      "orderId": "ORD-1001",
      "customerName": "Ivan Petrov",
      "total": 1790
    },
    "metadata": {
      "source": "checkout"
    }
  }'

Ответ:

{
  "eventId": "generated-or-provided-uuid",
  "published": true
}

Можно передать свой id, чтобы producer использовал его как idempotency key.

Локальный запуск без Docker

pnpm install
pnpm run build
pnpm run start:producer:prod
pnpm run start:consumer:prod

Для dev-режима:

pnpm run start:producer:dev
pnpm run start:consumer:dev

Если RabbitMQ запущен локально, установите:

RABBITMQ_URL=amqp://guest:guest@localhost:5672

Конфигурация

Основные переменные окружения:

  • RABBITMQ_URL - URL подключения к RabbitMQ.
  • RABBITMQ_EXCHANGE, RABBITMQ_ROUTING_KEY, RABBITMQ_QUEUE - основная топология событий.
  • RABBITMQ_RETRY_EXCHANGE, RABBITMQ_RETRY_QUEUE, RABBITMQ_RETRY_DELAY_MS - retry-топология через TTL и dead-letter routing обратно в основную очередь.
  • RABBITMQ_DEAD_LETTER_EXCHANGE, RABBITMQ_DEAD_LETTER_QUEUE - DLQ для невалидных сообщений и сообщений после исчерпания ретраев.
  • RABBITMQ_PUBLISH_RETRIES, RABBITMQ_CONNECTION_RETRIES - ретраи отправки и подключения.
  • PROCESSING_RETRY_ATTEMPTS - лимит повторной обработки consumer.
  • TELEGRAM_ENABLED, TELEGRAM_BOT_TOKEN, TELEGRAM_CHAT_ID - настройки Telegram Bot API.

Проверки

pnpm run lint
pnpm run test
pnpm run test:e2e
pnpm run build

Idempotency сейчас реализована in-memory на стороне consumer. Для production ее стоит заменить на Redis или базу данных, чтобы ключи переживали рестарты сервиса.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors