Trung BìnhNestJS iconNestJS

Event Emitter trong NestJS — @OnEvent và EventEmitter2?

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.

Xem toàn bộ NestJS cùng filter theo level & chủ đề con.

Mở danh sách NestJS