Skip to content

API Events

Bề mặt async duy nhất là một CDC consumer. Không có Kafka producer, BullMQ queue, hay WebSocket emission.

1. Inbound — Kafka

TopicProducerHandlerIdempotency KeyFailure Mode
public.Product (CDCKafkaTopics.PRODUCT)Debezium (commerce)TaxationWorkerService.handleProductCDC(productId, taxGroupId, op) — provision idempotentlog + skip (autocommit; không DLQ)

Config consumer (ApplicationKafkaComponent):

SettingGiá trị
Client IDAPP_ENV_KAFKA_CLIENT_ID (mặc định SVC-00130-TAXATION_CONSUMER)
Group IDAPP_ENV_KAFKA_GROUP_ID (mặc định SVC-00130-TAXATION_CONSUMER_GROUP)
Key deserializerstringDeserializer
Value deserializerjsonDeserializer
fallbackModelatest (không backfill lịch sử)
autocommittrue
requestTimeout / connectTimeout / maxWaitTime60000 / 30000 / 5000 ms

Route theo op:

Debezium opAction
c, u, r_reconcileTaxProvisions(after)
ddeprovisionForProduct(before.id ?? after.id)
otherbỏ qua

Nhánh reconcile (c/u/r):

State sản phẩmAction
deletedAt setdeprovision
không có taxGroupIddeprovision
taxGroupIdprovision (idempotent)

2. Outbound — Kafka

Không. Taxation không tạo event. Các dòng TaxSet/Tax đã provision được pricing đọc trực tiếp từ shared DB.

3. Inbound — BullMQ

Không.

4. Outbound — BullMQ

Không.

5. WebSocket Emissions

Không.

6. Payload Schemas

Payload inbound là một Debezium envelope quanh một dòng Product. Type từ @nx/core (TDebeziumMessage, TDebeziumPayload, TProductPgRow). Key dòng snake_case được convert qua toCamelCaseKeys trước khi dùng.

ts
// CDCKafkaTopics.PRODUCT — message.value
interface TDebeziumMessage<TProductPgRow> {
  payload: TDebeziumPayload<TProductPgRow>;
}

interface TDebeziumPayload<T> {
  op: 'c' | 'u' | 'r' | 'd';
  before: T | null; // snake_case
  after: T | null;  // snake_case
}

// Các trường worker đọc (sau toCamelCaseKeys):
//   id: string
//   taxGroupId: string | null
//   deletedAt: string | null

7. Idempotency & Ordering

TopicDeliveryOrderingRecovery
public.Productat-least-once (autocommit)per-partition (theo từng product key)re-deliver replay reconcile; provision skip khi đã provision với cùng TaxGroup

Không DLQ: onMessageError chỉ log. fallbackMode: latest nghĩa là các dòng thay đổi khi consumer down trước cửa sổ offset không được reprocess — không có backfill job (ADR-0001).

8. Trang liên quan

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