</>
⌕
Senior #microservices#message-pattern#event-pattern#transport

NestJS microservices: transport, @MessagePattern khác @EventPattern thế nào?

⚡ Trả lời nhanh

@MessagePattern là request-response: client dùng send(), handler trả giá trị và client chờ. @EventPattern là fire-and-forget: client dùng emit(), không có response, phù hợp thông báo sự kiện. Transport gồm TCP, Redis, NATS, MQTT, RabbitMQ, Kafka, gRPC.

@MessagePattern@EventPattern
Clientclient.send()client.emit()
ResponseCó (Observable)Không
Dùng choQuery/command cần kết quảSự kiện, nhiều consumer
// service nhận
@MessagePattern({ cmd: 'sum' })
sum(data: number[]) { return data.reduce((a, b) => a + b, 0); }

@EventPattern('user_created')
onCreated(data: { id: number }) { /* không return */ }

// client
const total = await firstValueFrom(this.client.send({ cmd: 'sum' }, [1, 2]));
this.client.emit('user_created', { id: 1 });
  • Khởi tạo bằng NestFactory.createMicroservice hoặc app.connectMicroservice (hybrid app).
  • Chọn transport: Kafka/RabbitMQ khi cần độ bền và redelivery; TCP/Redis cho đơn giản; gRPC cho contract chặt.
🃏 Ôn bằng flashcard