Skip to content

Kiến trúc Sự kiện

Các dịch vụ BANA giao tiếp bất đồng bộ thông qua ba cơ chế: Kafka (event streaming + CDC), Redis pub/sub (event bus nhẹ), và WebSocket (thông báo realtime cho client). Trang này liệt kê đầy đủ mọi topic, channel và loại event.

Kafka Topic

Định nghĩa trong packages/core/src/queues/kafka/topics.ts.

Sự kiện Ứng dụng

TopicProducerConsumerMục đích
payment.successsalefinance, inventoryThanh toán cho đơn hàng đã hoàn tất
purchase-order.receivedinventoryfinanceĐơn mua đã được nhận và xác nhận
commerce.initializedcommercefinance, inventoryOnboarding merchant mới hoàn tất
merchant.createdcommerceinventoryMerchant mới được tạo (cài đặt inventory)
product.createdcommercetaxationSản phẩm mới được tạo
product.updatedcommercetaxationSản phẩm được cập nhật
product-variant.createdcommercepricingBiến thể sản phẩm mới được tạo
product-variant.updatedcommercepricingBiến thể sản phẩm được cập nhật
ledger.generateledger (producer)ledger (consumer)Tác vụ tạo PDF/XLSX ledger

Topic CDC (Debezium)

Định nghĩa trong packages/search/src/common/kafka-topics.ts. Debezium nắm bắt các thay đổi WAL của PostgreSQL và publish chúng lên Kafka, dịch vụ search consume các thay đổi này để đồng bộ Typesense.

Topic CDCBảng nguồnCollection Typesense
nx.seller.public.Organizerpublic.Organizerorganizers
nx.seller.public.Merchantpublic.Merchantmerchants
nx.seller.public.Categorypublic.Categorycategories
nx.seller.public.Devicepublic.Devicedevices
nx.seller.public.SaleChannelpublic.SaleChannelsale-channels
nx.seller.public.Productpublic.Productproducts
nx.seller.public.ProductInfopublic.ProductInfo(làm giàu products)

Dead letter queue: nx.seller.cdc.dlq

Consumer Group Kafka

Dịch vụClient IDGroup IDTopic
financeSVC-00040-FINANCE_CONSUMERSVC-00040-FINANCE_CONSUMER_GROUPpayment.success, purchase-order.received, commerce.initialized
inventorySVC-00050-INVENTORY_CONSUMERSVC-00050-INVENTORY_CONSUMER_GROUPpayment.success, commerce.initialized, merchant.created
pricingSVC-00070-PRICING_CONSUMERSVC-00070-PRICING_CONSUMER_GROUPproduct-variant.created, product-variant.updated
taxationSVC-00130-TAXATION_CONSUMERSVC-00130-TAXATION_CONSUMER_GROUPproduct.created, product.updated
ledgerSVC-00060-LEDGER-{n}SVC-00060-LEDGER_GROUPledger.generate
search (CDC)commerce-cdc-consumercommerce-cdc-groupTất cả các topic CDC nx.seller.public.*

Client ID của Producer Kafka

Dịch vụClient ID
commerceSVC-00020-COMMERCE_PRODUCER
saleSVC-00030-SALE_PRODUCER
inventorySVC-00050-INVENTORY_PRODUCER
ledgerSVC-00060-LEDGER-01

Kênh Event Redis Pub/Sub

Các kênh sự kiện nhẹ cho giao tiếp nội bộ giữa các dịch vụ. Các kênh này không đi qua Kafka — chúng là Redis pub/sub trực tiếp.

Sự kiện Payment

Định nghĩa trong packages/core/src/common/events/payment-events.ts.

ChannelPublisherSubscriberMục đích
payment.order.successsale (payment webhook handler)finance, inventoryThanh toán đơn hàng hoàn tất — kích hoạt ghi nhận thu nhập và điều chỉnh tồn kho

Sự kiện Sale Check

Định nghĩa trong packages/sale/src/common/sale-check.constants.ts.

Sự kiệnMô tả
sale.check.createdCheck mới được tạo cho một đơn hàng
sale.check.updatedSố tiền/mục của check được cập nhật
sale.check.mergedHai check được gộp lại
sale.check.rolledBackHoàn tác việc gộp check
sale.check.paidCheck được thanh toán đầy đủ
sale.order.mergedHai đơn hàng được gộp
sale.order.mergeRolledBackHoàn tác việc gộp đơn hàng
sale.order.splitĐơn hàng được tách thành nhiều đơn

Topic WebSocket

Topic WebSocket theo pattern ws:{namespace}.{domain}.{entity}. Tên phòng theo wr:{namespace}/{path}.

Tiện ích Builder

Định nghĩa trong packages/core/src/common/events/websocket-events.ts:

  • WebSocketTopics — xây dựng chuỗi topic: ws:observation.sale.sale-order
  • WebSocketRooms — xây dựng tên phòng: wr:observation/merchants/{merchantId}

Topic theo từng dịch vụ

Sale (packages/sale/src/common/websocket.ts):

TopicMục đích
ws:observation.sale.sale-orderĐơn hàng được tạo/cập nhật
ws:observation.sale.sale-order-itemThay đổi mục đơn hàng
ws:observation.sale.sale-checkThay đổi trạng thái check
ws:observation.sale.kitchen-ticketTicket bếp được gửi
ws:observation.sale.kitchen-ticket-itemCập nhật mục ticket bếp
ws:observation.allocation.allocation-usageThay đổi sử dụng chỗ ngồi/phân bổ

Payment (packages/payment/src/common/websocket.ts):

TopicMục đích
ws:observation.payment.transactionCập nhật trạng thái giao dịch thanh toán
ws:observation.payment.payment-attemptSự kiện lần thử thanh toán riêng lẻ

Outreach (packages/outreach/src/components/websocket/topics.ts):

TopicMục đích
ws:observation.outreach.inquiry.submittedYêu cầu mới được gửi (thông báo realtime cho admin)

Loại Webhook Event

MQ-Pay → Sale (Payment Webhook)

Định nghĩa trong packages/sale/src/common/webhook-types.ts. Dịch vụ sale nhận các sự kiện này từ MQ-Pay qua HTTP header X-Webhook-Event-Type:

Loại sự kiệnHướngMục đích
mq-pay:attempt.successMQ-Pay → SaleLần thử thanh toán thành công
mq-pay:attempt.failedMQ-Pay → SaleLần thử thanh toán thất bại
mq-pay:attempt.expiredMQ-Pay → SaleLần thử thanh toán hết hạn
mq-pay:attempt.cancelledMQ-Pay → SaleLần thử thanh toán bị người dùng hủy
mq-pay:transaction.settledMQ-Pay → SaleGiao dịch hoàn tất đầy đủ (tất cả mục đã thanh toán)
mq-pay:transaction.cancelledMQ-Pay → SaleGiao dịch bị hủy

Sự kiện Nội bộ MQ-Pay

Được publish qua EventEmitter của Node.js trong thư viện MQ-Pay:

Sự kiệnMục đích
mq-pay:transaction.createdGiao dịch thanh toán mới được tạo
mq-pay:transaction.settledGiao dịch hoàn tất đầy đủ
mq-pay:transaction.cancelledGiao dịch bị hủy
mq-pay:attempt.createdLần thử thanh toán được khởi tạo
mq-pay:attempt.sentĐã gửi yêu cầu đến nhà cung cấp
mq-pay:attempt.successNhà cung cấp xác nhận thành công
mq-pay:attempt.failedNhà cung cấp báo cáo thất bại
mq-pay:attempt.expiredLần thử hết hạn
mq-pay:attempt.cancelledLần thử bị hủy
mq-pay:refund.successHoàn tiền thành công
mq-pay:refund.failedHoàn tiền thất bại

Các sự kiện này được bridge sang dịch vụ sale qua MQPaySaleEventAdapterSaleEventMapperServiceSalePaymentEventHandlerService.

Sơ đồ Luồng Sự kiện

Onboarding Merchant Mới

Luồng Thanh toán

Đồng bộ Sản phẩm (CDC)

Trang Liên quan

TrangMô tả
Kiến trúcDanh mục dịch vụ, chuỗi phụ thuộc, ma trận component
Hạ tầng — KafkaCài đặt cluster Kafka KRaft
Hạ tầng — CDCCấu hình pipeline CDC Debezium
Tổng quan PackagesTài liệu theo từng package

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