Skip to content

DobryySoul/DeliveryFlow

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 

Repository files navigation

DeliveryFlow — учебный проект на NATS

DeliveryFlow — мини-система оформления и доставки заказов. Это цельный проект с несколькими сервисами и инфраструктурой, где естественно используются разные паттерны NATS.

Архитектура

Сервисы

  • api-gateway — HTTP API для клиентов (создать заказ, получить статус).
  • identity — аутентификация (JWT), управление пользователями.
  • order — создание заказа и публикация доменных событий.
  • inventory — резервирование товара.
  • payment — списание/отмена платежа.
  • delivery — назначение курьера и статусы доставки.
  • review — отзывы к товарам и рейтинги.
  • notification — отправка уведомлений (email/push).
  • audit — запись истории событий.

Инфраструктура

  • NATS Core — шина событий и RPC.
  • JetStream — сохранение истории доменных событий.
  • PostgreSQL — состояние заказов, платежей и пользователей.
  • MongoDB — хранение отзывов (документная модель).
  • Redis — хранение сессий и временных токенов.

Зоны взаимодействия

  1. Event Bus (NATS Core)
    Обмен доменными событиями между сервисами.

  2. Queue Groups (Tasks)
    Фоновые задачи уведомлений и обработки очередей.

  3. Request/Reply (RPC)
    Синхронные запросы статусов, проверки наличия и валидация токенов.

  4. 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
Loading

Потоки сообщений

Pub/Sub (доменные события)

  • identityevents.user_registerednotification (Email "Welcome")
  • orderevents.order_createdinventory
  • inventoryevents.inventory_reservedpayment
  • paymentevents.payment_captureddelivery
  • reviewevents.review_creatednotification (Email "Thank you for review")

Queue Group (фоновая обработка)

  • events.*jobs.notify_usernotification (несколько воркеров)

Request/Reply

  • api-gatewayrpc.auth.loginidentity → токен
  • api-gatewayrpc.auth.verifyidentity → ok/error
  • api-gatewayrpc.create_orderorder → ответ
  • api-gatewayrpc.get_order_statusorder → ответ
  • api-gatewayrpc.create_reviewreview → ответ

JetStream

  • events.* → JetStream → audit → сохранение истории

NATS темы (subjects)

Events

  • events.user_registered
  • events.order_created
  • events.inventory_reserved
  • events.payment_captured
  • events.delivery_assigned
  • events.review_created

Jobs

  • jobs.notify_user

RPC

  • rpc.auth.login
  • rpc.auth.verify
  • rpc.create_order
  • rpc.get_order_status
  • rpc.create_review

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors