DeliveryFlow — мини-система оформления и доставки заказов. Это цельный проект с несколькими сервисами и инфраструктурой, где естественно используются разные паттерны NATS.
api-gateway— HTTP API для клиентов (создать заказ, получить статус).identity— аутентификация (JWT), управление пользователями.order— создание заказа и публикация доменных событий.inventory— резервирование товара.payment— списание/отмена платежа.delivery— назначение курьера и статусы доставки.review— отзывы к товарам и рейтинги.notification— отправка уведомлений (email/push).audit— запись истории событий.
- NATS Core — шина событий и RPC.
- JetStream — сохранение истории доменных событий.
- PostgreSQL — состояние заказов, платежей и пользователей.
- MongoDB — хранение отзывов (документная модель).
- Redis — хранение сессий и временных токенов.
-
Event Bus (NATS Core)
Обмен доменными событиями между сервисами. -
Queue Groups (Tasks)
Фоновые задачи уведомлений и обработки очередей. -
Request/Reply (RPC)
Синхронные запросы статусов, проверки наличия и валидация токенов. -
JetStream (History)
История заказов и возможность реплея событий.
flowchart LR
subgraph ClientZone[Client Zone]
C[client]
end
subgraph NATSZone[NATS Zone]
NATS[NATS Core]
JS[JetStream]
end
subgraph Services[Services]
API[api-gateway]
ID[identity]
O[order]
I[inventory]
P[payment]
D[delivery]
R[review]
N[notification]
A[audit]
end
C -->|HTTP auth/order/review| API
%% Auth Flow
API -->|request rpc.auth.login| NATS
NATS -->|request| ID
ID -->|reply token| NATS
ID -->|publish events.user_registered| NATS
%% Order Flow
API -->|request rpc.create_order| NATS
NATS -->|request| O
O -->|reply order_id| NATS
O -->|publish events.order_created| NATS
NATS -->|subscribe events.order_created| I
I -->|publish events.inventory_reserved| NATS
NATS -->|subscribe events.inventory_reserved| P
P -->|publish events.payment_captured| NATS
NATS -->|subscribe events.payment_captured| D
D -->|publish events.delivery_assigned| NATS
%% Review Flow
API -->|request rpc.create_review| NATS
NATS -->|request| R
R -->|reply ok| NATS
R -->|publish events.review_created| NATS
%% Notifications & Audit
NATS -->|queue group jobs.notify_user| N
NATS -->|stream events.*| JS
JS -->|deliver historical events| A
identity→events.user_registered→notification(Email "Welcome")order→events.order_created→inventoryinventory→events.inventory_reserved→paymentpayment→events.payment_captured→deliveryreview→events.review_created→notification(Email "Thank you for review")
events.*→jobs.notify_user→notification(несколько воркеров)
api-gateway→rpc.auth.login→identity→ токенapi-gateway→rpc.auth.verify→identity→ ok/errorapi-gateway→rpc.create_order→order→ ответapi-gateway→rpc.get_order_status→order→ ответapi-gateway→rpc.create_review→review→ ответ
events.*→ JetStream →audit→ сохранение истории
events.user_registeredevents.order_createdevents.inventory_reservedevents.payment_capturedevents.delivery_assignedevents.review_created
jobs.notify_user
rpc.auth.loginrpc.auth.verifyrpc.create_orderrpc.get_order_statusrpc.create_review