Я разрабатываю приложение .NET Core 3, которое содержит:
- REST API
- Frontend (проект Vue)
- Некоторое планирование задачи услуги по обработке. У каждого есть собственный маленький HTTP API для мониторинга
Каждый будет запускаться в отдельном контейнере Docker.
- Первый подход (который был в предыдущей версии) - один проект для API, другойдля процессора задач, третий для планировщика задач и т. д.
- Пример структуры проекта:
App.sln
-App.Internal.csproj
-App.Host.Api.csproj //executable for API
-App.Host.TaskProcessor.csproj //executable for task processor
-App.Host.TaskScheduler.csproj //executable for task scheduler
-App.Host.AnotherUsefulService.csproj //executable for other useful service
Второй подход - универсальный хост (IHostBuilder), аргумент командной строки (например, '--mode = api', '--mode = taskproc', '--mode = taskplan' и т. Д. Каждый контейнер докерабудет построен с соответствующим аргументом.
- Пример структуры проекта:
App.sln
-App.Internal.csproj
-App.Host.csproj //here goes executable, which chooses running services by args
-App.Internal.ApiService.csproj //has ApiService:IHostedService class
-App.Internal.TaskProcessorService.csproj //TaskProcessorService:IHostedService
-App.Internal.TaskSchedulerService.csproj //TaskShedulerService:IHostedService
-App.Internal.AnotherUsefulService.csproj //OtherService:IHostedService
Третий подход - как и второй, но использовать другие классы автозагрузки вместо IHostedService
Я думаю о втором, потому что он более универсальный и многократно используемый, но производительности нет илидругие известные проблемы?