Skip to content

ADR-0001. @nx/mq-pay được sử 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 địnhpayment-team
Thay thế

Bối cảnh

  • @nx/mq-pay là một engine 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 hệ thống auth, identity, và phạm vi merchant của BANA.
  • Hai lựa chọn:
    1. Chạy mq-pay như một microservice riêng với deployment + bề mặt REST riêng.
    2. Chạy mq-pay như một component in-process của @nx/payment.

Quyết định

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

Payment cung cấp lớp keo tích hợp (credential mã hóa, webhook event handler, điều phối mode) và tái sử dụng controller, repo, service, worker của mq-pay qua đăng ký in-process.

Hệ quả

Ưu điểmNhược điểm
Một service để deploy / monitor / securePhiên bản payment + mq-pay gắn chặt với nhau
In-process = độ trễ RPC bằng 0 giữa auth và mq-payKhó scale mq-pay độc lập như một service riêng
Chia sẻ DB / Redis / BullMQ — không double instrumentationMemory footprint của payment bao gồm cả mq-pay
Một danh mục permission Casbin duy nhấtBug trong mq-pay có thể làm sập payment + tiếp nhận IPN

Phương án thay thế đã 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; double infrastructurePhức tạp không đáng so với quy mô của chúng tôi
Nhúng code mq-pay trực tiếp vào paymentMột packageMất tính di động của MQ-PaySai layer — mq-pay có thể tái sử dụng

Tham chiếu

  • src/components/payment.component.ts:76-140 (setup MQ-Pay)
  • @nx/mq-pay/src/component.ts (MQPayComponent)

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