aforesaid / RtuItLab

Пример реализации микросервисной архитектуры на C# с использованием RabbitMQ.
MIT License
36 stars 14 forks source link
docker ef-core microservices rabbitmq

RtuItLab

Проект релизован в качестве демонстрации работы микросервисов, контейнеров docker, брокера сообщений RabbitMQ. Схема Схема взаимодействия микросервисов в проекте.

Порты, на которых располагаются микросервисы:

Микросервис Factories в свою очередь каждые 20 секунд пополняет "склады" магазинов. А микросервис Shops при покупке клиентом товаров добавляет покупку в список покупок пользователя на микросервисе Purchases.

Микросервисы

Каждый микросервис выполняет определённую роль. Рассмотрим их отдельно.

В каждом из микросервисов, кроме Factories используется swagger. В URL, прикреплённом к микросервисам вы сможете найти информацию по API-путям, а также методам, которые используются в данном микросервисе.

Каждый микросервис делится на 3 слоя :

Данный микросервис выполняет функцию аутентификации пользователей. Использует библиотеку AspNetCore.Identity для шифрования данных юзеров в БД, в частности использование хэшей, вместо паролей.

В ответ на логин пользователя, сервис шлёт токен JWT, в котором зашифрована информация по юзеру.

{
  "succeeded": true,
  "code": 200,
  "result": {
    "id": "ad6fbc79-71bc-4391-a673-c5784703eae8",
    "userName": "User",
    "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6ImFkNmZiYzc5LTcxYmMtNDM5MS1hNjczLWM1Nzg0NzAzZWFlOCIsIm5iZiI6MTYxNTA0ODU3MiwiZXhwIjoxNjE1NjUzMzcyLCJpYXQiOjE2MTUwNDg1NzJ9.FHvSD7-1T1104IP5Fjb9VbSf7xUyt90oGvinq8NEGhM"
  },
  "errors": []
}

В дальнейшем этот токен будет использоваться в заголовках запроса пользователя по другим микросервисам также. Конкретнее, его нужно положить в заголовок Authorization - Bearer {yourToken}.

Purchases

http://localhost:7002/swagger

Здесь пользователь может найти информацию по своим покупкам, а также сделать свои, но с ограничениями. Также пользователь может отредактировать покупки. Детальнее рассмотрим ниже.

Без параметра date или transactionType также будет работать.

Shops

http://localhost:7003/swagger

Данный микросервис реализует логику взаимодействия пользователя с магазинами. Пользователь может посмотреть список магазинов, посмотреть товары в магазине, и купить список товаров в определенном магазине. Рассмотрим только последний пункт.

Factories

http://localhost:7004/

Данный микросервис выполняет одну функцию - пополнения магазины товарами. Каждые 20 секунд данный сервис отправляет новые товары на сервис Shops, согласно данным в БД.

Базы данных

В проекте используется 4 базы данных:

Api Gateway (Ocelot)

http://localhost:5000

API Gateway — это высокопроизводительный, доступный и безопасный сервис размещения API, который помогает создавать, разворачивать программные интерфейсы приложения в любом масштабе и управлять ими.

В данном проекте вы найдёте реализацию Ocelot Api Gateway

Для конфигурирования проекта подключается ocelot.json файл, в котором расписаны пути, а также методы переадресации. Документацию по нему вы сможете найти здесь

Docker

Данный проект поддерживает docker. Для его запуска достаточно прописать:

docker-compose pull
docker-compose up

Детали конфигурации docker-compose вы можете найти здесь.

UnitTests

В проекте есть Smoke - тесты, для запуска которых необходимо запустить менеджера RabbitMQ.

Они покрывают доступность функционала.

Также есть Unit - тесты, которые покрывают функционал сервисов Purchases и Shops.