Простое приложение почтового ящика для отправки/приемки сообщений. Выполнен на 2-х микросервисах: User, Message.
- Стек проекта
- Функциональность проекта
- Описание микросервисов
- База данных
- Docker
- RabbitMQ
- API Gateway(Ocelot)
- UnitTests
- Запуск проекта
- P.S.
- Сервис User
- Аутентификация и авторизация
- Добавление пользователя
- Получение списка пользователей
- Удаление пользователя
- Получение id пользователя
- Сервис Message
- Отправка сообщений
- Получение сообщений
Оба микросервиса используют swagger(OpenApi). В них также присутствует Autofac для инверсии зависимостей. Прежде чем попасть в базу, данные проходят через Automapper. Сервис User отправляет данные сервису Message через RabbitMQ.
В каждом микросервисе присутсвует контроллер, сервис управления, конекст для работы с БД.
Микросервис осуществляет контроль пользователей в системе. Сущность содержит идентификатор (Guid), логин (за основу взят e-mail пользователя), пароль (конкатенируется с солью и вычисляется хэш), роль в системе (администратор или пользователь).
- Аутентификация и авторизация
Микросервис выполняет функции аутентификации и управления пользователями. Аутентификация происходит с помощью RSA-шифрования. В ответ направляется JWT-токен, в котором содержится id пользователя и его роль. В дальнейшем токен направляется в микросервис Message для проверки авторизации. Конкретнее, его нужно положить в заголовок Authorization. - Добавить администратора
Метод проверяет есть ли пользователи в системе, если нет, добавляет администратора. Е-mail проверяется по шаблону. Пароль проходит проверку по длине и сложности. Для этого создана библиотека для проверки входящих данных. - Добавить пользователя
Метод проверяет есть ли пользователь с таким именем в системе. Если нет, добавляет пользователя. - Получить список пользователей
Метод выводит список всех пользователей в системе. - Удалить пользователя
Метод удаляет пользователей, кроме администратора. - Получить id пользователя
Метод возвращает id пользователя из JWT-токена. Токен проходит проверку на валидность.
Микросервис выполняет функцию мессенджера. Полученные токен от сервиса User проверяется на валидность. Затем дается доступ к отправке и получению сообщений. Сущность содержит идентификатор (Guid), тело сообщения, от кого направлено, кому направлено.
- Получить сообщения
Метод возвращает все неполученные сообщения от других пользователей. При этом сообщения помечаются, как прочитанные. - Отправить сообщение
Метод отправляет сообщение другому пользователю.
В проекте используются 2 базы данных.
- Для микросервиса User
- Для микросервиса Message
Для входа в adminer введите следующие данные:
- Движок - PostgreSQL
- Сервер - db
- Имя пользователя - postgres
- Пароль - example
- База данных - totalAttectation
Подход проектирования БД: Code first
Тип хранения данных: PostgreSQL & Docker
ORM: Entity Framework Core
Для запуска подготовлен docker-compose файл в корне решения. dockerfile располагаются в проектах.
В проекте реализован брокер сообщений RabbitMq. В качестве издателя выступает сервис User - он отсылает токен пользователя в очередь сообщений, в качестве подписчика сервис Mеssage - находится в состоянии прослушивания очереди сообщений. При получении из очереди данных проводится проверка авторизации.
Для входа введите следующие данные:
- Имя - guest
- Пароль - guest
В проекте реализован Ocelot API Gateway для переадресации методов. Для конфигурирования проекта подключается totalAttectation.json файл, в котором расписаны пути, а также методы переадресации.
Проект SolutionTests содержит Unit-тесты на функционал микросервисов User и Message.
Можно запуститься через программу docker. Для запуска в терминале необходимо прописать следующие команды:
- git clone <адрес репозитория на Github>
- docker-compose up
После этого перейдите по указанным адресам.
Можно запуститься через среду разработки. В docker запустить контейнеры с базой данных, adminer и RabbitMq. Затем в Visual Studio (или другой IDE) запустить проекты User, Message, APIGateway. Перед запуском в проектах User(RabbitMqService), Message(Program.cs) следует поменять имя хоста службы RabbitMq на "localhost".
Для запуска необходимо прописать следующие команды:
- git clone <адрес репозитория на Github>
- docker-compose up <Имя контейнера>
Это мой первый проект, так что прошу привнести максимально объективную критику.