我是 Spring Reactive Modules 的新手。我得到的基本上是,它的核心是支持响应式编程,我们可以开发端到端的响应式服务。
但是,假设我只是想让我的 Controller 成为异步的,这样我就可以在多个线程上工作并发送像“任务已启动”这样的回复(不是特别是这个),然后继续我的工作并关闭 HTTP
链接。
我还了解了 @EnableAsync
和 @Async
来创建异步方法。
如果我只是在我想要异步的 Controller 方法上方使用 @Async
怎么办?它奏效了,但是,这是一个好习惯吗?我们可以在生产代码中使用它吗?
最佳答案
我没有发现使用 @Async
有任何问题,因为这将释放请求线程。但这是一种简单的方法,而且有很多局限性。请注意,如果你想处理 react 流,你没有能够做到这一点的 API。例如,如果 @Async
方法调用另一个方法,则第二个方法将不是异步的。
相反,Webflux 将带来最完整的 API(在 Java 中)以 react 方式处理事物。仅使用 @Async 无法做到的事情。例如,使用 Flux,您可以 react 性地处理或访问多个层,而您无法按照自己的方式进行处理。
不过,它会为你带来一个新的宇宙,所以如果你只是想释放请求的线程,你的做法就可以了,但如果你需要更多,你将不得不以更复杂的方式处理它.
现在,如果您想响应 HTTP 请求然后异步执行工作,这不是您想要的。我建议您有一个 JMS 提供程序(如 ActiveMQ),您的 Controller 将消息发送给作业处理并回答请求。
希望对您有所帮助!
关于java - Spring Reactive MVC 与 @EnableAsync,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48107287/