java - 在 Spring 中创建 worker

标签 java spring spring-mvc

我正在用 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,它在一定周期内从数据库获取下一个任务(通过 sleep 循环)。当任务执行时,worker 将结果保存到数据库并更新任务状态。

这种方法有意义吗?也许有更好的方法使用 spring 组件而不是 Thread 来做到这一点。

最佳答案

我不会为每个设备(客户端)创建工作人员。因为您的 Controller 将能够为部署在基于每个请求线程的服务器上的并发请求提供服务。此外,这根本不可扩展——如果板上有新设备怎么办?您需要对数据库进行更改,使用当前设计重新启动服务!!

如果您需要设备特定的操作,您只需将其传递到设备客户端的请求参数即可。因此,无需保留一组预定义的工作人员。

所以,除了工作组之外,设计看起来不错。

关于java - 在 Spring 中创建 worker ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54322474/

相关文章:

javascript - 如何从下拉列表中获取数据到 spring mvc Controller 中

java - 验证日期 - Bean 验证注释 - 具有特定格式

javascript - 如何在NodeJs中应用Java/Spring的分层架构?

java - 如何在 spring jdbctemplate 中编写查询来获取任意条件的多行?

spring - 使用 spring 和 restful webservice 自定义 HTTP 状态代码

java - MockMvc 测试 OPTIONS 请求

java - JScrollPane 无法检测到需要滚动的文本

java - SQL语法错误异常

java - 在 toast 上显示整数

java - 实体关系破坏 GET 请求 - Spring MVC