advanced
NestJS microservices module
Use NestJS transports, message patterns, serialization, timeouts, retries, idempotency, and boundaries between HTTP and messaging.
NestJS microservices use transport layers (TCP, Redis, NATS, Kafka, gRPC, MQTT) alongside or instead of HTTP. `@MessagePattern` and `@EventPattern` bind handlers to message shapes.
@Controller()
export class OrdersMsController {
@MessagePattern({ cmd: 'get_order' })
getOrder(@Payload() data: { id: string }) {
return this.orders.findOne(data.id);
}
@EventPattern('order_created')
onOrderCreated(@Payload() event: OrderCreatedEvent) {
return this.notifications.send(event);
}
}
Hybrid apps connect HTTP and microservice transports in one process. Serialization, timeouts, retries, and dead-letter handling are transport-specific. Idempotency matters for at-least-once delivery.
On interviews: when to split HTTP and messaging boundaries, request-response versus fire-and-forget events, and health checks across transports.
Common pitfalls: treating message handlers like HTTP without timeout/retry policy, shared mutable state between transports, and missing correlation IDs across services.
The trade-off is balancing simplicity, performance, safety, and operability — name which axis you optimized and what cost you accepted.
Checklist:
- Choose transport by delivery and ops requirements.
- Define explicit message contracts and versioning.
- Implement timeouts, retries, and idempotency.
- Keep domain logic transport-agnostic in services.