java - Spring Reactive MVC 与 @EnableAsync

标签 java spring spring-mvc asynchronous reactive-programming

我是 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/

相关文章:

java - Spring Security 记住我问题

java - Java Spring Web 应用程序的报告框架

java - 多模块项目中的spring配置

java - 更有效地从 Jar 中提取文件

java - 由于使用两个消息驱动器Bean更新同一表而导致的超时导致事务结束

java - MYSQL Workbench 未填充 Spring Boot JPA 实体的表数据

java - 初学者 Spring Batch 查询以了解 itemstream 和一些概念

java - 授权 header 的 Spring Security OAuth2 CORS 问题

C++ 中的 Java 反序列化

java - Spring MVC RequestMapping 发布方法