Test task for Invention Laboratory LLC. Разработка системы обработки XML-файлов на основе микросервисной архитектуры (C#, RabbitMQ, SQLite)
Этот проект состоит из двух микросервисов на .NET 9, которые взаимодействуют между собой через RabbitMQ:
FileParserService— парсит входные файлы, преобразует их в JSON и публикует сообщения в очередь RabbitMQ.DataProcessorService— подписывается на очередь и обрабатывает полученные сообщения.RabbitMQ— брокер сообщений с веб-интерфейсом для мониторинга.
Все сервисы запускаются и работают внутри Docker-контейнеров с помощью docker-compose.
InvLabTask/
│
├─ FileParserService/
│ ├─ Dockerfile
│ ├─ FileParserService.csproj
│ └─ ...
│
├─ DataProcessorService/
│ ├─ Dockerfile
│ ├─ DataProcessorService.csproj
│ └─ ...
│
├─ ModelLayer/
│ ├─ ModelLayer.csproj
│ └─ ...
│
├─ docker-compose.yml
└─ InvLabTask.sln
Перед запуском убедись, что установлены:
- Docker;
- Docker Compose;
- Git (если проект клонируется из репозитория).
Проверить версии:
docker --version
docker compose version- Клонируй репозиторий:
git clone https://github.com/lpestl/InvLabTask.git
cd InvLabTask- Собери и запусти все контейнеры
docker compose up --buildNote
Первый запуск может занять несколько минут, пока Docker скачивает образы и собирает .NET-проекты.
- ...
- ProfIT!
RabbitMQзапустится наlocalhost:5672- (веб-интерфейс управления доступен на http://localhost:15672)
- Логин: user
- Пароль: password
FileParserServiceподключится кRabbitMQи начнёт публиковать JSON-сообщения в очередьinstrument_status_queue.DataProcessorServiceподключится к той же очереди и начнёт принимать и обрабатывать сообщения.
Note
Все изменяемые параметры, такие как Порт для RabbitMQ, имя очереди, логин, пароль и пр. можно задавать в файлах appsetings.json (в случае запуска в Docker контейнерах - appsettings.Docker.json)
| Сервис | Назначение | Порты | Зависимости |
|---|---|---|---|
| rabbitmq | брокер сообщений | 5672 (AMQP), 15672 (UI) | — |
| fileparser | публикует JSON в очередь | — | rabbitmq |
| data-processor | слушает очередь и обрабатывает сообщения | — | rabbitmq |
- Открой RabbitMQ Management UI
- В разделе Queues появится очередь instrument_status_queue.
- Посмотри логи контейнеров:
docker compose logs -f fileparser
docker compose logs -f data-processorТы должен увидеть, как первый сервис публикует сообщения, а второй — получает, записывает в SQLite базу данных и выводит их в консоль.
- В корне проекта должна появится папка
output, а в ней файл базы данныхInstrumentStatus.sqlite. Посмотреть содержимое БД и обновлённые данные можно любой удобной тулой, например, DB Browser for SQLite
Для остановки и удаления контейнеров:
docker compose downЕсли хочешь очистить тома RabbitMQ (удалить данные очередей):
docker compose down -v| Команда | Описание |
|---|---|
docker compose ps |
Проверить, какие контейнеры запущены |
docker compose logs -f |
Смотреть логи всех сервисов |
docker exec -it rabbitmq bash |
Подключиться внутрь контейнера RabbitMQ |
docker images / docker container ls -a |
Просмотр образов и контейнеров |
Если нужно пересобрать всё заново:
docker compose down -v --rmi all --remove-orphans
docker compose up --buildЕсли возникли проблемы с запуском или RabbitMQ не подключается:
- Проверь, что в коде хост указан как
rabbitmq, а неlocalhost RabbitMQдолжен быть “Healthy” (вdocker psбудетhealthy)
Перезапусти сервисы:
docker compose restart