Проект состоит из набора микросервисов для эмуляции и тарификации звонков мобильного оператора «Ромашка».
- Незавершенно
-
commutator – эмулятор коммутатора:
- генерирует записи звонков абонентов;
- хранит список абонентов и логи звонков в H2 (in-memory);
- собирает CDR-файлы по 10 записей и отправляет в BRT через RabbitMQ.
-
BRT – сервис реального времени биллинга:
- сохраняет данные звонков и абонентов в PostgreSQL;
- пересылает данные в HRS для расчёта списаний;
- обновляет балансы абонентов;
- предоставляет информацию для CRM по REST.
-
HRS – сервис расчёта тарифов:
- хранит информацию о тарифах в PostgreSQL;
- рассчитывает списания по классическим и помесячным тарифам;
- возвращает результаты расчётов в BRT.
-
CRM – сервис управления клиентами:
- не реализовано
-
docker-compose.yml – организация контейнеров (RabbitMQ, PostgreSQL, микросервисы).
-
init.sql – скрипт инициализации схем PostgreSQL для BRT и HRS.
+---------------+ +-----------+ +-------+
| commutator |--(AMQP)->| rabbitmq |--(AMQP)-->| BRT |
| (генерация | | | | |
| CDR-файлов) | | | | |
+---------------+ +-----------+ +-------+
|
REST (Не реализован) |
v
+-----------+ +-------+
| HRS |<--(REST)-| |
| (расчёт) | | |
+-----------+ +-------+
|
REST (Не реализован) v
+-----------+
| CRM |
| (API) |
+-----------+
- commutator использует H2 (in-memory) для быстрого старта и демонстрации; консоль H2 доступна по
/h2-console. - BRT и HRS хранят данные в PostgreSQL с автоматическим созданием/удалением схемы (
ddl-auto: create-drop) для тестирования. - Актуализацию схемы PostgreSQL можно выполнять через
init.sql. - Асинхронная передача CDR через RabbitMQ обеспечивает масштабируемость и надёжность.
- CRM настроен на H2, но легко переключается на PostgreSQL через изменение
application.yml. - В проектах используются Spring Boot (Web, Data, Security, AMQP), JPA, Maven, Docker.
subscribers(id, name, msisdn, tariff_id, registration_date, balance)calls(id, type, subscriber_id, peer_number, start_time, end_time)
subscribers(id, name, msisdn, balance, registration_date, tariff_id)calls(id, type, msisdn, peer_number, start_time, end_time)
tariffs(id, name, inbound_rate, outbound_rate, monthly_fee, minutes_included)- Дополнительные таблицы историй расчётов при необходимости.
- не реализовано
-
Поднять RabbitMQ (порт 5672, консоль 15672).
-
Поднять PostgreSQL с БД
brtиhrs(user=admin, pass=admin). -
Выполнить
init.sqlдля создания необходимых таблиц. -
В IDE или терминале выполнить для каждого модуля:
mvn spring-boot:run -pl commutator mvn spring-boot:run -pl BRT mvn spring-boot:run -pl HRS mvn spring-boot:run -pl CRM
- RabbitMQ:
guest/guest - PostgreSQL:
admin/admin
- commutator (H2):
jdbc:h2:mem:testdb, useradmin, passadmin - BRT (PostgreSQL):
jdbc:postgresql://localhost:5432/brt, useradmin, passadmin - HRS (PostgreSQL):
jdbc:postgresql://localhost:5432/hrs, useradmin, passadmin