【问题标题】:Spring Reactive MVC vs @EnableAsyncSpring Reactive MVC 与 @EnableAsync
【发布时间】:2018-06-14 21:26:12
【问题描述】:

我是 Spring Reactive Modules 的新手。我得到的基本上是,它的核心是支持响应式编程,我们可以开发端到端的响应式服务。

但是,假设我只想将我的控制器设置为异步,这样我就可以在多个线程上工作并发送诸如“任务已启动”之类的回复(不是特别是这个),然后继续我的工作并关闭 @987654321 @链接。

我还了解了 @EnableAsync 和 @Async 来制作异步方法。

如果我只是在我想要异步的控制器方法上方使用@Async 怎么办。它有效,但是,这是一个好习惯吗?我们可以在生产代码中使用它吗?

【问题讨论】:

  • 不要在控制器方法上使用 @Async... 有更好的方法可以通过与 servlet 容器的异步功能集成的方式进行异步处理。

标签: java spring spring-mvc asynchronous reactive-programming


【解决方案1】:

我没有看到使用@Async 有任何问题,因为这将释放请求线程。但这是一种简单的方法,它有很多限制。请注意,如果您想处理反应式流,您没有能够做到这一点的 API。例如,如果 @Async 方法调用另一个方法,则第二个方法不会是异步的。

Webflux 将带来最完整的 API(在 Java 中)以响应式方式处理事物。你不能只用@Async 做什么。例如,使用 Flux,您可以响应式地处理或访问多个层,而这无法达到您的操作方式。

尽管如此,它会给你带来一个新的宇宙,所以如果你只是想释放请求的线程,你的方法很好,但如果你需要更多,你将不得不以更复杂的方式处理它.

现在,如果您想响应 HTTP 请求然后异步执行工作,这不是您想要的。我建议您使用 JMS 提供程序(如 ActiveMQ),您的控制器将消息发送到作业处理并回答请求。

希望对你有帮助!

【讨论】:

    猜你喜欢
    • 2021-04-25
    • 2021-08-19
    • 2023-03-19
    • 1970-01-01
    • 2018-05-04
    • 2019-03-29
    • 1970-01-01
    • 2014-11-10
    • 2011-07-29
    相关资源
    最近更新 更多