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

0 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors