Skip to content

Repository files navigation

InvLabTask

Test task for Invention Laboratory LLC. Разработка системы обработки XML-файлов на основе микросервисной архитектуры (C#, RabbitMQ, SQLite)

Task

Solution

Этот проект состоит из двух микросервисов на .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

PreRequirements

Перед запуском убедись, что установлены:

Проверить версии:

docker --version
docker compose version

Quick Start

  1. Клонируй репозиторий:
git clone https://github.com/lpestl/InvLabTask.git
cd InvLabTask
  1. Собери и запусти все контейнеры
docker compose up --build

Note

Первый запуск может занять несколько минут, пока Docker скачивает образы и собирает .NET-проекты.

  1. ...
  2. ProfIT!

Что произойдёт при запуске

  • RabbitMQ запустится на localhost:5672
  • Логин: user
  • Пароль: password
  • FileParserService подключится к RabbitMQ и начнёт публиковать JSON-сообщения в очередь instrument_status_queue.
  • DataProcessorService подключится к той же очереди и начнёт принимать и обрабатывать сообщения.

Note

Все изменяемые параметры, такие как Порт для RabbitMQ, имя очереди, логин, пароль и пр. можно задавать в файлах appsetings.json (в случае запуска в Docker контейнерах - appsettings.Docker.json)

Сервисы в Docker Compose

Сервис Назначение Порты Зависимости
rabbitmq брокер сообщений 5672 (AMQP), 15672 (UI)
fileparser публикует JSON в очередь rabbitmq
data-processor слушает очередь и обрабатывает сообщения rabbitmq

Проверка работы

  1. Открой RabbitMQ Management UI
  • В разделе Queues появится очередь instrument_status_queue.
  1. Посмотри логи контейнеров:
docker compose logs -f fileparser
docker compose logs -f data-processor

Ты должен увидеть, как первый сервис публикует сообщения, а второй — получает, записывает в SQLite базу данных и выводит их в консоль.

  1. В корне проекта должна появится папка 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 Просмотр образов и контейнеров

FAQ

Если нужно пересобрать всё заново:

docker compose down -v --rmi all --remove-orphans
docker compose up --build

Если возникли проблемы с запуском или RabbitMQ не подключается:

  • Проверь, что в коде хост указан как rabbitmq, а не localhost
  • RabbitMQ должен быть “Healthy”docker ps будет healthy)

Перезапусти сервисы:

docker compose restart

About

Test task for Invention Laboratory LLC

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages