Skip to content

API Events

Không Kafka. @platformatic/kafka được khai báo trong package.json nhưng không có đấu nối producer/consumer trong src/. Tất cả eventing là in-process (EventBus eventemitter3) fan out tới hàng đợi BullMQ, với fan-out thời gian thực qua WebSocket. Xem ADR-0001.

1. Inbound — Kafka

Không. Dịch vụ không tiêu thụ topic Kafka nào.

2. Outbound — Kafka

Không. Dịch vụ không produce topic Kafka nào.

3. Sự kiện in-process (EventBus)

EventBus (eventemitter3) — phát bởi TicketEmitter, xử lý bởi listener trong src/application/events/listeners/. Loại event là TicketEventTypes (chuỗi có dấu chấm) từ @nx/core. Đồng bộ trong API process; lỗi listener được bắt và log (không bao giờ crash emitter).

Loại eventMethod emitterListener(s)Side effect
ticket.createdTicketEmitter.ticketCreatedTicketCreatedListenerTăng số đếm category/tag; enqueue job context-enrichment + assignment
ticket.status_changedTicketEmitter.ticketChangedStatusTicketStatusChangedListenerSide effect status (thông báo, trigger survey)
ticket.assignedTicketEmitter.ticketAssignedTicketAssignedListenerThông báo phân công
ticket.message.createdTicketEmitter.ticketMessageCreatedTicketMessageCreatedListenerThông báo trả lời, đánh dấu first-response SLA

4. Inbound — BullMQ

Hàng đợi được tạo bởi QueueComponent; tiêu thụ bởi worker trong src/components/workers/ (worker process, RUN_MODE=worker). Concurrency từ WORKER_CONFIG.

Hàng đợiTên jobProducerWorker → Use-caseConcurrencyRetries
helpdesk.sla-monitorsla-monitorCron (lặp lại) + trigger thủ côngsla-monitor.workerRunSlaMonitorUseCase12, cố định 60s
helpdesk.escalationescalation, escalation-batchsla-monitor / escalation managerescalation.workerProcessEscalationUseCase53, exp 5s (priority 1)
helpdesk.assignmentassignTicketCreatedListenerassignment.workerAutoAssignTicketUseCase53, exp 5s
helpdesk.notificationnotification, notification-batch, notification-digestnhiềunotification.workerProcessNotificationService105, exp 5s (priority 10)
helpdesk.context-enrichmentenrichTicketCreatedListenercontext-enrichment.workerEnrichTicketContextUseCase303, exp 5s
helpdesk.survey-triggersurvey-triggerluồng status-changedsurvey-trigger.workerTriggerSurveyUseCase33, exp 10s

Một tên hàng đợi helpdesk.analytics-update (ANALYTICS_UPDATE) tồn tại trong QUEUE_NAME, nhưng không có worker/queue nào được đấu nối cho nó. Job thất bại route tới HandleDeadLetterUseCase qua dlq.helper.ts.

5. Outbound — BullMQ

Job được enqueue qua JobDispatcherHelper (publish / publishAll) và các builder job có kiểu trong src/shared/helpers/jobs/.

Builder jobHàng đợiTrigger
ContextEnrichmentJob.enrichcontext-enrichmentTicket tạo với context
AssignmentJob.assignassignmentTicket tạo (chiến lược LOAD_BALANCED)
NotificationJob.*notificationCảnh báo/vi phạm SLA, phân công, trả lời, escalation
EscalationJob.*escalationVi phạm SLA bởi sla-monitor
SurveyTriggerJob.*survey-triggerTicket resolved/closed
Cron SLA monitorsla-monitorQueueComponent.scheduleSlaMonitoring() (jobId sla-monitor-cron)

6. Phát WebSocket

Gửi bởi ApplicationWebSocketComponent + socket-event.service.ts. Topic/room được build từ helper @nx/core.

TopicRoomTrigger
HelpdeskWebSocketTopics.HELP_DESK (observation/helpdesk)HelpdeskWebSocketRooms.getHelpdeskRooms({ ticketId, messageId }) (helpdesk/:ticketId/:messageId)Message mới / thay đổi status / phân công / event SLA

7. Schema Payload

Payload event in-process là interface TS trong src/shared/common/interfaces/ (không phải hợp đồng message tập trung, vì không có Kafka). Hình dạng đại diện:

ts
// ticket.created — ITicketCreatedEventData
interface ITicketCreatedEventData {
  ticketId: string;
  merchantId: string;
  categoryId: string;
  priority: TTicketPriorities;
  context?: Record<string, unknown>;
  categoryRouting?: unknown;
  metadata: { tagIds: string[]; [k: string]: unknown };
}

8. Idempotency & Thứ tự

KênhĐảm bảoThứ tựPhục hồi
EventBusin-process, at-most-oncethứ tự emit, đồng bộkhông — lỗi listener được log, không retry
BullMQ jobsat-least-once (retry theo hàng đợi)theo hàng đợi, không thứ tự toàn cụcretry kèm backoff → DLQ qua HandleDeadLetterUseCase; helper idempotency worker de-dup
SLA cronđúng một lịchn/ajobId: 'sla-monitor-cron' cố định ngăn lặp lại trùng

9. Trang liên quan

Proprietary and Confidential. Unauthorized copying, distribution, or use of this software is strictly prohibited.