Khác nhau ở mô hình giao tiếp.
@MessagePattern — request-response (RPC). Client gọi client.send(pattern, payload), nhận về một Observable; giá trị handler trả về được gửi ngược lại cho client. Client chờ kết quả.
@EventPattern — fire-and-forget. Client gọi client.emit(pattern, payload), không chờ; giá trị handler trả về bị bỏ qua, không có response channel.
ts
@Controller()
export class OrderController {
@MessagePattern({ cmd: 'get_order' })
getOrder(@Payload() id: string) {
return this.service.findOne(id) // sent back to the caller
}
@EventPattern('order_created')
async onOrderCreated(@Payload() data: OrderCreatedEvent) {
await this.mailer.sendConfirmation(data) // return value ignored
}
}Chọn cái nào: cần dữ liệu trả về để tiếp tục xử lý (lấy thông tin user, kiểm tra tồn kho) thì dùng send/@MessagePattern.
Chỉ thông báo "việc X đã xảy ra" cho các consumer xử lý side effect độc lập (gửi mail, ghi log, cập nhật analytics) thì dùng emit/@EventPattern — không tạo coupling thời gian giữa hai service.