【问题标题】:Spring Boot 2 & Spring 5 Container confusionSpring Boot 2 & Spring 5 容器混淆
【发布时间】:2017-07-30 20:28:20
【问题描述】:

我有一个 Spring Boot 1.4.3 项目。最近我提出了一个要求,我必须将日志从服务器发送到我的 Web 应用程序并在网页上打印日志。我知道 WebSockets,但我一直在寻找更好的解决方案,结果遇到了反应式编程和 gRPC。

Spring 在 Spring 版本 5 中支持反应式编程,但我对 gRPC 和反应式编程感到很困惑。 gRPC 具有构建在 Netty 之上的双向流式传输,并提供与将数据从服务器推送到客户端(如反应式编程)相同的功能。那么我应该使用哪一个,如果你能解开我的困惑,那就太好了。

另外,如果我迁移到支持 Spring 版本 5 的 Spring Boot 2,该项目将在 Netty 上运行。我的困惑是,我是否必须在不同的容器上运行我的应用程序,例如 Jetty 服务器上的普通 REST 端点和 netty 服务器上的 Reactive API,或者 Spring 将通过处理 netty 上的反应性请求和剩余的一般 REST 为我开箱即用地处理这个问题码头服务器上的 API,因为据我所知 Netty 不是 Servlet 容器。

【问题讨论】:

  • 为什么反应式编程可以解决这个问题?只有反应式编程不会添加任何东西。 Spring Boot 2 和 Spring 5 也是最终版本,因此您可能不想在生产中使用它。如果您只想发送日志,请将它们存储在可以访问它们的地方(例如数据库),而不是尝试重写整个应用程序。
  • @M.Deinum 日志数据存储在数据库中,但前端将连接到后端,以便可以从数据库中读取日志并将作为持续流推送到前端数据的。持续更新的日志数据也会在同一个活动连接期间被读取并推送到客户端。
  • 仍然反应对你没有帮助。您仍然需要一种机制将其传输到前端,例如 Web 套接字的服务器发送事件。在没有反应式编程的情况下,这两者你都可以做得很好。
  • @M.Deinum 正如我所说,在查看响应式编程时,我了解到数据可以作为响应式编程中的连续数据流从服务器推送到客户端,同样可以通过gRPC 也是(比 Web 套接字更好)。现在,我很困惑应该使用 gRPC 还是使用响应式编程。
  • 再一次,只有没有交通工具的反应式编程不会给你任何东西。您仍然需要像 gRPC(正如 Andy 指出的不是通过 gRPC)、Web 套接字或服务器发送事件这样的机制。仅在其中进行响应式编程不会对您有所帮助。恕我直言,只需在您现在拥有的堆栈中使用 Server Sent Evens 来实现它,而不是尝试重新引入一个完整的新堆栈来满足此类要求。

标签: java spring spring-boot reactive-programming


【解决方案1】:

反应式编程的一个关键特性是背压,以及以非阻塞方式实现的背压。在撰写本文时,gRPC doesn't support this

除了客户端和服务器之间的通信之外,响应式编程还有更多内容。要真正做出反应,你需要从头到尾都是反应性的。这包括对数据存储的响应式访问等。据我所知,这不是 gRPC 解决的问题。

您不应该尝试混合使用传统的基于 Servlet 的 Web 框架(例如 Spring MVC)和 WebFlux(Spring 的响应式 Web 框架)。您应该编写 100% 响应式 Web 应用程序或 100% 基于 Servlet 的 Web 应用程序。

【讨论】:

    猜你喜欢
    • 2015-02-16
    • 2021-09-07
    • 2015-11-17
    • 2017-11-22
    • 2012-02-10
    • 1970-01-01
    • 2019-03-07
    • 2021-12-13
    • 1970-01-01
    相关资源
    最近更新 更多