是否有任何库或解决方案 spring 响应需要很长时间的工作

is there any library or solution for spring response with long time needed job

我项目中的一些过程需要几分钟(1~10 分钟)。我使用 spring boot web 提供了这个过程的结果。所以我的 API 必须 return 状态响应 (queueing/running/finished/failed)。所以我做了一些由 ResponseEntity Class.

实现的属性

我的请求流程是

  1. 用户请求
  2. javascript 使用参数
  3. 调用 API
  4. server make job using request's attribute(parameter, user information)
  5. 检查作业是否已经存在。如果不是,则将作业放入队列。如果存在,return 现在的工作状态(完成的工作有过程的结果)。

QueueExecutor 运行将新作业发送给处理组件,然后创建线程定期检查。

  1. 用户的客户端周期性请求。得到这份工作是 queueing/running/finished 使用 setInterval()。如果没有完成,通过。否则,运行 UI 进程。

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

我建议使用推送技术比传统的轮询方法更好,more information

首先你需要在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-Library 你应该 register/subscribe 消息。

看看这些使用 spring 进行推送的示例: