【问题标题】:What is Spring MVC Based on Reactor?什么是基于 Reactor 的 Spring MVC?
【发布时间】:2017-07-28 06:11:39
【问题描述】:

我刚刚阅读了有关 Spring 和 Reactor 的所有内容,并且确实意识到 Reactor 应该包含在即将推出的 Spring Framework 5 中(顺便说一句,有人在生产中使用它吗?)

我的兴趣是在 Spring MVC 中使用它,既然它目前不是框架的一部分,那么 Reactor 如何在 Spring MVC 中使用?从网上的例子来看,现在在等待Framework 5时在Spring中使用Reactor,就是使用reactor-bus。

Spring MVC + Reactor 的当前状态是否只是将 reactor-bus 添加到 MVC 应用程序?

查看 Github 显示 reactor-bus 似乎处于传统模式?

为现有 Spring MVC 提供响应式功能的当前方法是什么?

【问题讨论】:

    标签: spring spring-mvc project-reactor


    【解决方案1】:

    Spring 5 和 WebFlux 将为您带来最大的好处,因为框架本身使用反应式编程并且是完全非阻塞的,如果您的数据库也支持异步(想想 Cassandra, Redis、MongoDB、Couchbase 以及响应式 Spring Data Kay)。

    也就是说,即使您的应用不是完全反应式的,像 Reactor 这样的库也可以带来好处。例如,如果您有一个需要大量编排的服务层。如果这些服务将任务表示为异步类型(理想情况下是Flux/Mono/Publisher,还有Future),您可以将它们桥接到 Reactor 并使用强大的运算符来构建复杂的异步处理管道。

    最后一点是让 Spring 4.x 处理这些异步结果。该框架在DeferredResult<T> 类型中提供了一种支持形式,您可以从FluxMono 获得它(下面的示例很简单,并没有显示我上面提到的运算符的组合,其中将隐藏在服务中):

    @GetMapping()
    public DeferredResult<User> getCurrentUser() {
        DeferredResult<User> result = new DeferredResult();
        Mono<User> mono = myService.getCurrentUser();
        mono.subscribe(
          value -> result.setResult(value),
          error -> result.setErrorResult(error)
        );
        return result;
    }
    

    【讨论】:

      猜你喜欢
      • 2022-10-24
      • 1970-01-01
      • 1970-01-01
      • 2010-11-17
      • 1970-01-01
      • 2016-11-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多