我的项目中的某些过程需要几分钟(1~10分钟(。 我使用弹簧启动网络提供此过程的结果。 所以我的 API 必须返回带有状态(排队/正在运行/完成/失败(的响应。 所以我使这种属性由响应实体类实现。
我的请求流是
- 用户请求
- JavaScript 使用参数调用 API
- 服务器使用请求的属性(参数、用户信息(进行作业 检查作业是否已存在。如果
- 不存在,请将作业放入队列。如果存在,则返回"现在作业状态(已完成作业具有进程的结果("。
QueueExecutor 运行新作业来处理组件,然后使线程定期检查。
- 用户的客户端请求定期。 并使用 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