使用DeferredResult异步处理请求

冷不防 2022-12-05 02:17 356阅读 0赞
  1. 我们在实际开发的过程中,可能会遇到需要长轮循的情况。
  2. 长轮询指的是客户端向服务端发送一个请求,然后服务端将该请求hold住,另起线程进行处理,处理完后,再返回结果,从而提高服务器的处理能力,但是对于浏览器来说还是同步的,需要等待服务端返回。
  3. 可以使用Callable或者DeferredResult进行异步响应。
  4. 下面就来演示一下使用spring提供的DeferredResult来提供一个异步处理的接口。
  5. @GetMapping("test")
  6. public DeferredResult<ResponseEntity<String>> testDeferredResult(){
  7. DeferredResult<ResponseEntity<String>> deferredResult = new DeferredResult();
  8. deferredResult.onCompletion(() -> log.info("completion"));
  9. deferredResult.onTimeout(() -> log.info("timeout"));
  10. new Thread(() -> {
  11. try {
  12. TimeUnit.SECONDS.sleep(30);
  13. } catch (InterruptedException e) {
  14. deferredResult.setErrorResult(e.getMessage());
  15. }
  16. deferredResult.setResult(ResponseEntity.ok("SUCCESS"));
  17. }).start();
  18. return deferredResult;
  19. }
  20. 然后通过浏览器请求,经过三十秒的等待后获取到了服务端的响应 Success

发表评论

表情:
评论列表 (有 0 条评论,356人围观)

还没有评论,来说两句吧...

相关阅读

    相关 使用DeferredResult异步处理请求

         我们在实际开发的过程中,可能会遇到需要长轮循的情况。      长轮询指的是客户端向服务端发送一个请求,然后服务端将该请求hold住,另起线程进行处理,处理完后,再