NestJS cung cấp @nestjs/event-emitter (wrapper của EventEmitter2) cho internal events — không phải distributed messaging mà là in-process pub/sub.
typescript
// Setup
EventEmitterModule.forRoot({ wildcard: true, delimiter: '.' })
// Emit từ service
import { EventEmitter2 } from '@nestjs/event-emitter';
this.eventEmitter.emit('order.created', new OrderCreatedEvent(order));
// Listen với @OnEvent
@OnEvent('order.created')
async handleOrderCreated(event: OrderCreatedEvent) {
await this.emailService.sendOrderConfirmation(event.order);
}
// Wildcard
@OnEvent('order.*') // Bắt tất cả order events
async handleAllOrderEvents(event: any) { ... }Async events: @OnEvent('order.created', { async: true }) để handler chạy async không block emitter.
Dùng cho: decoupling business logic (sau khi create order, nhiều services cần xử lý), audit logging, notifications. Pitfall: không dùng cho cross-service communication — dùng Kafka/RabbitMQ thay.