是否有任何库或解决方案用于长时间需要工作的弹簧响应



我的项目中的某些过程需要几分钟(1~10分钟(。 我使用弹簧启动网络提供此过程的结果。 所以我的 API 必须返回带有状态(排队/正在运行/完成/失败(的响应。 所以我使这种属性由响应实体类实现。

我的请求流是

  1. 用户请求
  2. JavaScript 使用参数调用 API
  3. 服务器使用请求的属性(参数、用户信息(进行作业
  4. 检查作业是否已存在。如果
  5. 不存在,请将作业放入队列。如果存在,则返回"现在作业状态(已完成作业具有进程的结果("。

QueueExecutor 运行新作业来处理组件,然后使线程定期检查。

  1. 用户的客户端请求定期。 并使用 setInterval(( 获取作业正在排队/正在运行/完成。 如果未完成,则通过。 否则,运行 UI 进程。

在我的流程中,我有很多小问题,所以我想知道是否有任何通用或有用的库或解决方案。 请给我指教。 谢谢。

我建议使用推送技术比传统的轮询方法更好,更多信息。

首先,你需要在 Spring 中创建一个消息处理控制器:

@Controller
public class GreetingController {
@MessageMapping("/hello")
@SendTo("/topic/greetings")
public Greeting greeting(HelloMessage message) throws Exception {
Thread.sleep(1000); // simulated delay
return new Greeting("Hello, " + HtmlUtils.htmlEscape(message.getName()) + "!");
}
}

然后为 STOMP 消息传递配置 Spring :

@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig implements WebSocketMessageBrokerConfigurer {
@Override
public void configureMessageBroker(MessageBrokerRegistry config) {
config.enableSimpleBroker("/topic");
config.setApplicationDestinationPrefixes("/app");
}
@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {
registry.addEndpoint("/gs-guide-websocket").withSockJS();
}
}

在客户端,您应该注册/订阅消息的JS库。

看看这些使用弹簧进行推动的例子:

  • 使用 Spring Boot 2.1 介绍 Servlet 4.0 服务器推送
  • 实现 Spring Websocket 服务器和客户端
  • 使用 WebSocket 构建交互式 Web 应用程序
  • Spring 5 和 Servlet 4 – The PushBuilder

最新更新