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

时间:2018-10-07 07:37:31

标签: spring spring-mvc spring-boot long-polling spring-web

我的项目中的某些过程需要几分钟(1〜10分钟)。并且我使用Spring Boot Web提供了此过程的结果。因此我的API必须返回状态为(排队/正在运行/完成/失败)的响应。所以我通过ResponseEntity Class来实现这种属性。

我的请求流程是

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

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

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

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

1 个答案:

答案 0 :(得分:1)

我建议使用推技术要优于传统的轮询方法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库注册/订阅消息。

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