我正在编写一个带有 spring(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 传递给每个 worker,因此内部的 worker 可以保存任务的结果。
Worker - 扩展Thread,它在一定时期内从数据库中获取下一个任务(通过带有睡眠的循环)。当任务执行时,工作人员将结果保存到数据库并更新任务状态。
这种方法有意义吗?也许有更好的方法来使用弹簧组件而不是线程来做到这一点。
芜湖不芜
幕布斯7119047
相关分类