Я пишу веб-сервер с пружиной (mvc, data, security), который обслуживает задачи для физических устройств (количество устройств составляет около 100).Устройство не имеет реализации запроса внутри.Например, для выполнения какой-то задачи вам нужно написать что-то вроде этого:
Device driver = new DeviceDriver();
driver.setSettings(settingsJson);
driver.open(); // noone else can't connect to this device, open() can take up to 1 second
driver.setTask(taskJson);
driver.processTask(); // each task takes a few seconds to execute
String results = driver.getResults();
driver.close();
Я не очень разбираюсь в проектировании архитектуры, поэтому на данный момент реализован веб-сервер, подобный этому:
TaskController (@ RestController) - обрабатывает входящие запросы Post с задачами и сохраняет их в базе данных.
DeviceService (@ Service) - имеет метод init, который получает список устройств из БД и создает / запускает одного работника на устройство.Он передает taskRepository каждому работнику, поэтому рабочий внутри может сохранять результаты задач.
Работник - расширяет Поток , он получает следующую задачу из базы данных с определенным периодом (черезкругом со сном).Когда выполненная задача работник сохраняет результат в БД и обновляет статус задачи.
Имеет ли такой подход какой-либо смысл?Может быть, есть лучший способ сделать это, используя пружинные компоненты вместо резьбы.