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

Java 如何使用Spring boot构建非阻塞异步Web服务,java,asynchronous,spring-boot,nonblocking,Java,Asynchronous,Spring Boot,Nonblocking,我有一个使用SpringBoot设计的RESTfulWebService web服务相当繁重,因为它在启动时必须进行大量的数据库调用,而且一些其他端也需要进行繁重的IO操作来提供结果 我想让RESTfulAPI成为异步的,这样它就可以更具可伸缩性,并且不需要花费时间来提供结果 我在SpringAsync中查看了 我甚至实现了这一点,但我无法测试这是否是异步的 如果我想要像这样的东西怎么办 如果向url/all发出请求 它显示web服务正在即时处理结果,然后在所有处理完成后显示实际结果 这怎么可能

我有一个使用SpringBoot设计的RESTfulWebService

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

我想让RESTfulAPI成为异步的,这样它就可以更具可伸缩性,并且不需要花费时间来提供结果

我在SpringAsync中查看了

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

如果我想要像这样的东西怎么办

如果向url/all发出请求

它显示web服务正在即时处理结果,然后在所有处理完成后显示实际结果

这怎么可能

我也调查过这件事


在这个问题上没有代码,因为这是我面临的一个设计问题,因为如何解决它请与我忍受。谢谢你问了两个问题

  • 如何用Java构建异步服务器
  • 如何测试其性能
  • 在我看来,你对第一个问题的解决方案是有效的。当然你可以用,或者,或者。但这取决于您的用例

    对于你的第二个问题,我建议使用。因为您的代码不应该阻塞太多,所以您将能够处理更多的并发请求。您只需要注意,最好从单独的机器上运行
    wrk
    ,而不是从运行Java的服务器上运行

    Public interface Callback<T>{
    
    public void callWhenDone(T result);
    //process the result in you implemenation
    }
    

    启动线程new MyThread(params,callbackimplementation)。Start()

    Spring Boot自动支持请求

    最简单的杠杆方式如下:

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