Skip to content

An application with a microservice architecture that uses a message broker (RabbitMQ) for parsing XML files.

Notifications You must be signed in to change notification settings

vlados1kin/xml-parser

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

11 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Система обработки XML-файлов на основе микросервисной архитектуры

Инструкция по запуску

1. Клонировать данный репозиторий

git clone https://github.com/vlados1kin/xml-parser

2. Перейти в директорию

cd xml-parser

3. Поднять Docker-контейнеры

docker-compose up --build -d

После успешного развертывания RabbitMQ будет доступен в браузере по этому адресу. Если у вас нет Docker Desktop, то его нужно будет установить себе на локальную машину.

4. Запустить сервисы

Выполните в терминале последовательно следующие команды.

cd .\src\Services\DataProcessorService\
dotnet run
cd .\..\..\..\
cd .\src\Services\FileParserService\
dotnet run

Инструкция по использованию

После того как микросервисы и RabbitMQ запущены, можно приступать к работе. appsettings.json файл микросервиса FileParserService выглядит следующим образом:

{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft.Hosting.Lifetime": "Information"
    }
  },
  "FileMonitoring": {
    "InputDirectory": "D:\\test"
  },
  "RabbitMq": {
    "Host": "localhost",
    "Username": "guest",
    "Password": "guest"
  }
}

InputDirectory - путь к директории, откуда начинается сканирование файлов с расширением .xml. У меня было две идеи для реализации данного микросервиса:

  • Полное сканирование директории с периодом 1 секунда (polling). Полное сканирование имеет много недостатков: постоянная нагрузка на CPU и диск; повторное сканирование того же файла, даже если он не был изменен.
  • Использовать событийно-ориентированный подход (FileSystemWatcher). При событийно-ориентированном подходе ОС сама оповещает нас об изменениях, связанных с этой папкой (добавление, изменение, удаление файла), нам остается лишь подписаться на событие. Минус этого подхода в том, что если у нас в папке уже есть файлы, то сервис никак на них не отреагирует.

В ТЗ не было сказано про условия, в которых работает сервис, то я предположил, что изначально папка будет пуста. Тогда такой подход более чем оправдан. Если папка InputDirectory отсутствует, то она будет создана - в логах вы увидите предупреждение об этом. Начинайте размещать *.xml файлы в данной папке - FileParserService начнет их сканировать.


Разберем appsettings.json файл для микросервиса DataProcessorService:

{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft.Hosting.Lifetime": "Information"
    }
  },
  "ConnectionStrings": {
    "DefaultConnection": "Data Source=Persistence/ModuleStatus.db"
  },
  "RabbitMq": {
    "Host": "localhost",
    "Username": "guest",
    "Password": "guest"
  }
}

DefaultConnection - относительный путь, где будет создан файл с БД. В историю Git я занес db файл, но вы можете удалить этот файл - микросервис сам применит миграцию и создаст БД, если её нет. В моей реализации ModuleState - это enum, поэтому в БД они сохранены в виде чисел. Пример содержания БД, после обработки файла status.xml


Если появятся вопросы, то можете мне написать в Telegram или создать issue с проблемой. Буду очень ждать обратной связи!

About

An application with a microservice architecture that uses a message broker (RabbitMQ) for parsing XML files.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages