How geovanesv/nestjs-rabbitmq-opentelemetry works
This repository demonstrates an order lifecycle across an HTTP NestJS producer, RabbitMQ, and a NestJS consumer, with end-to-end OpenTelemetry traces, metrics, and logs. The producer validates requests, creates and retains orders in memory, and publishes them; the consumer restores trace context and baggage, processes orders with idempotency and retry/DLQ handling. Telemetry is exported through an OpenTelemetry Collector to Jaeger, Prometheus-format metrics, and Loki. Arrows reflect README contracts and sampled source references; unsampled implementation details are represented only at supported directory paths.
Main entry points: order.consumer.ts Order handler · order.service.ts Order service · src/main.ts Consumer bootstrap · src/main.ts Producer bootstrap
Components 30
Order producer
- Producer bootstrap
producer/src/main.ts - Orders API
producer/src/order.controller.ts - Order validation
producer/src/order.dto.ts - Health endpoint
producer/src/health.controller.ts - Order service
producer/src/order.service.ts - In-memory orders
producer/src/order.service.ts - Order identifiers
producer/src/ids.ts - Baggage creation
producer/src/baggage.ts - Producer configuration
producer/src/config.ts
RabbitMQ messaging
- RabbitMQ
- Producer queue client
producer/src/rabbitmq.config.ts
Order consumer
- Consumer bootstrap
consumer/src/main.ts - Retry and DLQ topology
consumer/src/queue/dlq.setup.ts - Order handler
consumer/src/order.consumer.ts - Trace extraction
consumer/src/tracing/extract-trace-context.ts - Baggage reader
consumer/src/tracing/read-baggage.ts - Retry policy
consumer/src/retry-policy.ts - Idempotency store
consumer/src/idempotency.store.ts - Consumer configuration
consumer/src/config.ts
Telemetry
- Producer telemetry SDK
producer/src/tracing.ts - Messaging span processor
producer/src/messaging-span-processor.ts - Producer metrics
producer/src/metrics.ts - Producer OTel logger
producer/src/otel-logger.ts - Consumer telemetry SDK
consumer/src/tracing.ts - Messaging span processor
consumer/src/messaging-span-processor.ts - Consumer metrics
consumer/src/metrics.ts - Consumer OTel logger
consumer/src/otel-logger.ts - OTel Collector
- Jaeger, Prometheus, Loki
Other components
- HTTP client
Connections 38
- HTTP client → Producer bootstrap: sends HTTP
README.md - Producer bootstrap → Orders API: registers routes
- Producer bootstrap → Health endpoint: registers endpoint
- Producer bootstrap → Producer telemetry SDK: initializes first
producer/src/main.ts - Producer bootstrap → Producer OTel logger: installs logger
producer/src/main.ts - Orders API → Order validation: accepts DTO
producer/src/order.controller.ts - Orders API → Order service: delegates orders
producer/src/order.controller.ts - Health endpoint → Producer configuration: reads settings
producer/src/health.controller.ts - Order service → In-memory orders: stores orders
producer/src/order.service.ts - Order service → Producer queue client: publishes through
producer/src/order.service.ts - Producer queue client → RabbitMQ: connects to
producer/src/rabbitmq.config.ts - Order service → Order identifiers: creates identifiers
producer/src/order.service.ts - Order service → Baggage creation: creates baggage
producer/src/order.service.ts - Order service → Producer metrics: records metrics
producer/src/order.service.ts - Order service → RabbitMQ: publishes order
README.md - Consumer bootstrap → Consumer telemetry SDK: initializes first
consumer/src/main.ts - Consumer bootstrap → Consumer OTel logger: installs logger
consumer/src/main.ts - Consumer bootstrap → Retry and DLQ topology: sets up topology
consumer/src/main.ts - Consumer bootstrap → RabbitMQ: starts consumer
README.md - Retry and DLQ topology → RabbitMQ: declares queues
consumer/src/queue/dlq.setup.ts - Consumer bootstrap → Consumer configuration: configures service
consumer/src/main.ts - Order handler → Trace extraction: extracts headers
consumer/src/order.consumer.ts - Order handler → Baggage reader: reads baggage
consumer/src/order.consumer.ts - Order handler → Retry policy: chooses retry
consumer/src/order.consumer.ts - Order handler → Idempotency store: checks duplicates
consumer/src/order.consumer.ts - Order handler → Consumer configuration: reads settings
consumer/src/order.consumer.ts - Order handler → Consumer metrics: records metrics
consumer/src/order.consumer.ts - RabbitMQ → Order handler: delivers order
README.md - Order handler → RabbitMQ: acks or retries
consumer/src/order.consumer.ts - Producer telemetry SDK → Messaging span processor: registers processor
producer/src/tracing.ts - Consumer telemetry SDK → Messaging span processor: registers processor
consumer/src/tracing.ts - Producer telemetry SDK → OTel Collector: exports signals
README.md - Consumer telemetry SDK → OTel Collector: exports signals
README.md - Producer metrics → OTel Collector: exports metrics
README.md - Consumer metrics → OTel Collector: exports metrics
README.md - Producer OTel logger → OTel Collector: exports logs
README.md - Consumer OTel logger → OTel Collector: exports logs
README.md - OTel Collector → Jaeger, Prometheus, Loki: routes telemetry
README.md