春天无阻碍休息“发送并忘记”

时间:2016-02-04 08:39:38

标签: java spring rest spring-mvc asynchronous

我正在编写一个无阻塞的Spring Rest控制器。我的客户应该发送请求,不关心响应,也不需要等待。

这是我的服务器代码:

@RestController
@EnableAsync
public class testController {

@RequestMapping(value = "test", method = RequestMethod.GET)
public ResponseEntity<String> test() throws InterruptedException {
    timeConsumingMethod();
    System.out.println("I'm should be first");
    return new ResponseEntity<String>("the server is processing your request", HttpStatus.OK);
}

@Async
private void timeConsumingMethod() throws InterruptedException {
    Thread.sleep(1000*5);
    System.out.println("I'm should be second!");
}

然而,当我使用(POSTMAN,Chrome等)http://localhost:8181/test来电话时 我在服务器日志中获得以下内容:

我应该是第二名!

我应该是第一个

仅在等待5秒后,我的浏览器显示:

服务器正在处理您的请求

这是“发送并忘记”行为的正确方法吗?

2 个答案:

答案 0 :(得分:6)

根据doc页面,应在配置类上添加@EnableAsync

  

启用Spring的异步方法执行功能,类似于   Spring的XML命名空间中的功能。

     

要在@Configuration类上使用,如下所示,其中MyAsyncBean是   用户定义的类型,其中一个或多个方法使用其中一个进行注释   Spring的@Async注释,EJB 3.1 @ javax.ejb.Asynchronous   注释或通过注释指定的任何自定义注释()   属性。

答案 1 :(得分:0)

为什么不使用此功能: https://www.baeldung.com/spring-webclient-resttemplate

Webflux客户端似乎也是如此。我正在寻找一种类似的解决方案,其中1个微服务将多个微服务异步调用,这适合模型