Общая схема.pdf (то же самое файлом)
- CdrGenerator - микросервис, который отвечает за генерацию "входных данных". Он генерирует Cdr данные, каждые 10 записывает в файл (в директорию generatedCdr), записывает в базу данных, а также отправляет их в микросервис Brt через кафку в топик
cdr_switch_to_brt
. - Brt - микросервис, который авторизирует пользователей (проверяет, является ли пользователь абонентом "Ромашки") и снимает деньги с пользователей.
Brt читает данные из топика
cdr_switch_to_brt
, авторизирует абонентов, отправляет обновленные данные в микросервис Hrs через топикcdr_enriched_brt_to_hrs
, получает обратно информацию о том, сколько денег нужно снять с абонентов и производит снятие денег с баланса. - Hrs - микросервис, который производит вычисления суммы, которую нужно списать с абонента, в соответствии с его тарифом. Hrs считывает из топика
cdr_enriched_brt_to_hrs
информацию о звонках, вычисляет длительность звонка и производит тарификацию. В топикcost_hrs_to_brt
отправляются данные о сумме, которую нужно списать с абонентов, у которых классический тариф (нет помесячной платы, фиксированная стоимость минуты звонка). В топикtariff_hrs_to_brt
отправляются данные о сумме, которую нужно списать с абонентов с помесяным тарифом.
Схема баз данных.pdf (то же самое файлом)
Было принято логичное и рациональное решение создать собственную базу данных для каждого микросервиса, чтобы одно приложение (микросервис) был подключен и делал запросы ровно в одну бд.
- Микросервис CdrGenerator содержит базу данных, состоящую из двух таблиц. Таблица
clients
содержит всех существующих клиентов, которые будут учавствовать в звонках при их генерации. В таблицуhistory
записываются все сгенерированные записи из cdr. - Микросервис Brt содержит базу данных, состоящую из трех таблиц. Таблица
clients
содержит абонентов оператора "Ромашка". В таблицуhistory
записываются пришедшие данные о звонках, но только абонентов оператора "Ромашка". Также таблицаhistory
содержит стоимость звонка и статус отправки стоимости из hrs (можно использовать эту таблицу для просмотра логов). В таблицу `tariff_payments_history' из записываются приходящие из Hrs данные о помесячных списаниях. - Микросервис Hrs содержит базу данных, состоящую из трех таблиц. Таблица
tariffs
содержит список всех существующих тарифов. Соответсвенно, если появится новый тариф его просто следует добавить в эту таблицу и записать правила тарификации в json в соответсвтии с его структурой (структура json с правилами тарификации также есть в сфеме таблицы). В таблицуhistory
записывается история списаний. Таблицаtraffic
нужна для хранения абонентов с помесячным тарифом для списания с этих абонентов определенной суммы в конце месяца (сумма прописана в таблицеtariffs
в tariff_rules). Также в ней хранится количество потраченных минут, чтобы знать, когда бесплатные минуты закончатся.
- Перед запуском сервисов требуется через докер запустить контейнеры:
zookeper
,kafka
,postgres_cdr
,postgres_brt
,postgres_hrs
. - После этого запустить сначала сервисы Brt, Hrs, запустив соответствующие SpringBootApplication: BrtApplication, HrsApplication.
- После запустить сервис CdrGenerator.
После проделанных пунктов запустятся три микросервиса. CdrGenerator
сразу после запуска отправит POST запрос на генерацию данных. Таким образом данные сгенерируются, отправятся в Brt и так далее. То есть весь цикл приложения пройдет успешно и деньги снимутся с баланса абонентов. Чтобы повторно сгенерировать данные нужно отправить POST запрос по пути http://localhost:8080/generate
и снова данные пройдут весь этот путь. Тело запроса и авторизация не требуется.
К сожалению, сервисы запускаются только в ручном режиме, когда запуска осуществляется через docker-compose почему-то не работает кафка и не получится протестировать всё приложение если запускать .jar через docker-compose, получится протестировать только CRM
, то есть поотправлять запросы от абонента или от менеджера. Чтобы проверить, что приложение работает полностью следует запустить сервисы в ручном режиме.
В проекте используется Basic
авторизация для абонента и для менеджера.
- Для того, чтобы авторизировать как абонент логин/пароль
номер телефона/номер телефона
. - Для того, чтобы авторизироваться как менеджер логин/пароль
admin/admin
.
- База данных в сервисе CdrGenerator:
jdbc:postgresql://localhost:5432/postgres
user
:postgres,password
:postgres. - База данных в сервисе Brt:
jdbc:postgresql://localhost:6432/postgres
user
:postgres,password
:postgres. - База данных в сервисе Hrs:
jdbc:postgresql://localhost:7432/postgres
user
:postgres,password
:postgres.