my_CQRS
Описание
Пример паттерна CQRS на RAW SQL psql и fastapi
Языки
- Python100%
CQRS Microservices with FastAPI and PostgreSQL
Описание
Этот проект реализует архитектурный подход CQRS (Command Query Responsibility Segregation) с использованием FastAPI и PostgreSQL. Проект состоит из двух микросервисов:
- Users Service — отвечает за создание и обновление пользователей (Командная сторона).
- Profiles Service — отвечает за чтение профилей пользователей (Читательская сторона).
Связь между сервисами осуществляется через генерацию событий. Сервис Profiles подписывается на события от Users для создания и обновления профилей.
Основные технологии
- FastAPI — веб-фреймворк для создания API.
- asyncpg — асинхронная библиотека для работы с PostgreSQL.
- PostgreSQL — реляционная база данных для хранения данных пользователей и профилей.
- Asyncio Queue — имитация брокера сообщений для обмена событиями между сервисами.
Установка
-
Клонируйте репозиторий:
-
Перейдите в директорию проекта:
-
Убедитесь, что у вас установлен Python 3.7+ и PostgreSQL.
-
Создайте и активируйте виртуальное окружение:
-
Установите зависимости:
-
Настройте PostgreSQL и создайте базу данных:
- Создайте базу данных
.mydatabase - Настройте доступы пользователя и пароль в соответствии с вашими настройками (по умолчанию это указано в коде).
- Создайте базу данных
Запуск
Users Service (порт 8000)
Запустите сервис для управления пользователями:
Profiles Service (порт 8001)
Запустите сервис для чтения и обновления профилей:
Теперь оба сервиса запущены и могут взаимодействовать друг с другом.
API Методы
Users Service
-
Создание пользователя:
- POST /users/
- Пример тела запроса:
- POST
-
Обновление пользователя:
- PUT /users/{user_id}
- Пример тела запроса:
- PUT
Profiles Service
- Получение профиля пользователя:
- GET /profiles/{user_id}
- Пример ответа:
- GET
Структура проекта
cqrs-fastapi-postgres/
│
├── users_service.py # Командный сервис для управления пользователями
├── profiles_service.py # Читательский сервис для работы с профилями
├── db_utils.py # Общие функции для работы с базой данных и событиями
├── requirements.txt # Зависимости проекта
└── README.md # Описание проекта
Как работает CQRS
- Users Service отвечает за создание и обновление пользователей. После создания/обновления, он отправляет соответствующее событие (
илиUserCreated) в очередь событий.UserUpdated - Profiles Service прослушивает очередь событий и создает или обновляет профиль пользователя в своей базе данных в зависимости от типа события.
Лицензия
Этот проект находится под лицензией MIT.