Skip to content

ADR-0001. @nx/mq-pay được dùng như component, không phải service riêng

TrườngGiá trị
Trạng tháiAccepted
Ngày2026-01-15
Người quyết địnhPhat Nguyen
Thay thế-

Bối cảnh

  • @nx/mq-pay là một bộ máy thanh toán đa nhà cung cấp (VNPAY, v.v.) với controller, service, repository và BullMQ worker riêng.
  • Chúng tôi cần tích hợp nó với phần auth, identity và scope merchant của BANA.
  • Có hai lựa chọn:
    1. Chạy mq-pay như một microservice riêng với deployment và lớp REST riêng.
    2. Chạy mq-pay như một component chạy trong cùng tiến trình của @nx/payment.

Quyết định

Dùng mq-pay như một component (MQPayComponent) được nạp bởi ApplicationPaymentComponent. @nx/payment là service được triển khai; mq-pay là code thư viện.

Payment cung cấp phần gắn kết tích hợp (credential đã mã hoá, webhook event handler, điều phối mode) và tái sử dụng controller, repo, service, worker của mq-pay thông qua đăng ký trong cùng tiến trình.

Hệ quả

Ưu điểmNhược điểm
Chỉ một service để deploy / giám sát / bảo mậtPhiên bản payment và mq-pay gắn chặt với nhau
Chạy cùng tiến trình = độ trễ RPC bằng 0 giữa auth và mq-payKhó scale mq-pay độc lập như một service riêng
Dùng chung DB / Redis / BullMQ - không phải đo đạc hai lầnDung lượng bộ nhớ của payment gồm cả phần mq-pay
Một danh mục permission Casbin duy nhấtLỗi trong mq-pay có thể làm sập payment và việc tiếp nhận IPN

Phương án đã cân nhắc

Lựa chọnƯu điểmNhược điểmLý do từ chối
Service @nx/mq-pay riêngScale độc lậpRPC mỗi request; hạ tầng nhân đôiPhức tạp không đáng so với quy mô của chúng tôi
Nhúng thẳng code mq-pay vào paymentMột packageMất tính tái dùng của MQ-PaySai tầng - mq-pay là code tái dùng được

Tham chiếu

  • src/components/payment.component.ts:76-140 (thiết lập MQ-Pay)
  • @nx/mq-pay/src/component.ts (MQPayComponent)

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