当前位置: 首页 > 知识库问答 >
问题:

如何使用Spring boot构建非阻塞异步Web服务

钱繁
2023-03-14

我有一个使用Spring Boot设计的RestFul Webservice。

web服务相当繁重,因为它必须在启动时进行大量的数据库调用,并且有些端到其他端进行大量的IO操作来提供结果。

我想让Restful Api成为异步的,这样它就可以更有伸缩性,而且它花时间来提供它的结果。

我甚至实现了这一点,但我无法测试这是否是异步的。

如果我想要

如果向url/all发出请求

共有1个答案

严子默
2023-03-14

Spring Boot自动支持Servlet Spec3+异步处理http请求。

最简单的利用方法如下所示:

public Callable<ResponseEntity<?>> myProcessingMethod () {
    return () -> ResponseEntity.ok (myHeavyService.doTheWork ());
} 

上面的要点是以最快的速度释放您的HTTP请求处理线程,使其为下一个请求做好准备。一旦您的服务调用完成,控制将返回到http处理线程,以便将结果发送给调用方。

public ResponseEntity<?> myProcessingMethod () {
    myHeavyService.doTheWorkAsync ()
    return ResponseEntity.ok ();
} 
 类似资料:
  • 我认为下面的流量链将通过事件循环放置/执行(像JS)。因此,运行下面的代码将首先打印阻塞循环&然后将执行通量链。 但是,整个通量总是先执行,然后才移动到循环。[我确实有一些语句正在阻塞。但是有两个阶段] 当我们使用reactor时,通过使用一些调度程序来实现异步/非阻塞行为的唯一方法? 如果我不使用任何调度器,并让代码使用当前线程执行,那么即使对于IO密集型应用程序,使用WebFlux而不是Spr

  • 我是新进入Vert. x的。我遵循了Vert. x文档和一些教程。但是我混淆了使用Vert. x实现非阻塞REST Web服务的正确方法是什么。我在Java中找到了这篇文章开发非阻塞Web应用程序,其中包含一个使用Vert. x实现非阻塞Web应用程序的示例。 此代码块包含向另一个Vertical(“todoService”:TodoServiceVerticle)发送消息。 这是“todoSer

  • 我刚刚开始尝试了解RxJava,以便我可以使用项目反应器重构旧版SOA系统来使用非阻塞异步微服务。 目前,我正在做一项可行性研究,并考虑使用类似spoon的东西来转换遗留服务代码(但这与这个问题无关) 我想知道如何使用reactor bus Request/Reply语法来替换这个同步服务代码。或者即使我应该使用完全不同的Reactor结构。 这里是一个遗留soa服务的示例,它是人为设计的,因此可

  • 我有一个springboot项目,它使用springboot RestTemplate。我们已经从1.5.3转移到了SpringBoot2.0.1,并且我们正在尝试通过使用WebClient将rest调用异步化。我们过去使用Resttemplate处理接收到的字符串,如下所示。但是WebClient只返回单点或通量数据。如何将数据作为字符串获取。已经尝试了block()方法,但它执行异步调用。 使

  • 本文向大家介绍请你说一下阻塞,非阻塞,同步,异步相关面试题,主要包含被问及请你说一下阻塞,非阻塞,同步,异步时的应答技巧和注意事项,需要的朋友参考一下 参考回答: 阻塞和非阻塞:调用者在事件没有发生的时候,一直在等待事件发生,不能去处理别的任务这是阻塞。调用者在事件没有发生的时候,可以去处理别的任务这是非阻塞。 同步和异步:调用者必须循环自去查看事件有没有发生,这种情况是同步。调用者不用自己去查看

  • 实时的web特性通常需要为每个用户一个大部分时间都处于空闲的长连接. 在传统的同步web服务器中,这意味着需要给每个用户分配一个专用的线程,这样的开销是十分巨大的. 为了减小对于并发连接需要的开销,Tornado使用了一种单线程事件循环的方式. 这意味着所有应用程序代码都应该是异步和非阻塞的,因为在同一时刻只有一个操作是有效的. 异步和非阻塞这两个属于联系十分紧密而且通常交换使用,但是它们并不完全