quarkus 使用啥应用服务器?
Posted
技术标签:
【中文标题】quarkus 使用啥应用服务器?【英文标题】:What application server does quarkus use?quarkus 使用什么应用服务器? 【发布时间】:2020-04-22 20:24:15 【问题描述】:当启动一个 quarkus jar 时,我没有看到任何服务器正在启动,我看到的是:
C:\Java Projects\quarkus-demo\target>java -jar quarkus-demo-1.0-SNAPSHOT-runner.jar
2020-01-04 18:25:54,199 WARN [io.qua.net.run.NettyRecorder] (Thread-1) Localhost lookup took more than one second, you ne
ed to add a /etc/hosts entry to improve Quarkus startup time. See https://thoeni.io/post/macos-sierra-java/ for details.
2020-01-04 18:25:54,521 INFO [io.quarkus] (main) quarkus-demo 1.0-SNAPSHOT (running on Quarkus 1.1.0.Final) started in 3.
231s. Listening on: http://0.0.0.0:8080
2020-01-04 18:25:54,522 INFO [io.quarkus] (main) Profile prod activated.
2020-01-04 18:25:54,522 INFO [io.quarkus] (main) Installed features: [cdi, resteasy, resteasy-jackson]
这是什么意思?它不使用应用程序服务器吗? Quarkus 是应用服务器还是类似的东西? 我似乎无法在网上找到任何有关此的信息。
【问题讨论】:
【参考方案1】:Quarkus 使用 Vert.x/Netty。
来自https://developers.redhat.com/blog/2019/11/18/how-quarkus-brings-imperative-and-reactive-programming-together/:
Quarkus 使用 Vert.x 和 Netty 作为其核心。而且,它使用了一堆 响应式框架和扩展,以帮助开发人员。夸库斯 不仅适用于 HTTP 微服务,也适用于事件驱动 建筑学。它的反应性使其在处理时非常有效 带有消息(例如,Apache Kafka 或 AMQP)。
这背后的秘诀是为两者使用一个反应式引擎 命令式和反应式代码。
Quarkus 在这方面做得非常出色。在命令式和反应式之间, 显而易见的选择是拥有一个反应核心。有什么帮助是 一个快速的非阻塞代码,可以处理几乎所有通过 事件循环线程(IO 线程)。但是,如果你正在创建一个典型的 REST 应用程序或客户端应用程序,Quarkus 还为您提供 命令式编程模型。例如,Quarkus HTTP 支持是 基于非阻塞和反应式引擎(Eclipse Vert.x 和 网状)。您的应用程序收到的所有 HTTP 请求都由 事件循环(IO 线程),然后被路由到 管理请求。根据目的地,它可以调用 在工作线程(servlet、Jax-RS)上管理请求的代码或使用 IO 是线程(反应式路由)。
【讨论】:
很好的答案!还可以补充一点,使用 Undertow 也是一种选择【参考方案2】:,我没有看到任何服务器正在启动,
我在您的日志中看到NettyRecorder
,它正在侦听端口 8080。这实际上是在启动“服务器”
从https://code.quarkus.io/ 你可以看到它可以将 Undertow 用于 servlet,或将 Vertx 作为嵌入式服务器,使用 RESTEasy / JAX-RS 作为 REST API 库实现
Camel 的 HTTP 端点是另一个可能的服务器
【讨论】:
我在这里看到它说它使用 netty 作为基础层,并且 netty 是非阻塞的。 quarkus.io/extensions 。这是否意味着如果我只需要一个简单的 rest servlet 服务器,我就必须对其进行一些切换? Netty 处理 TCP 层。 Vertx 或 Undertow 处理 HTTP 流量。不确定是否能回答您的问题【参考方案3】:它是一个微服务框架,而不是应用服务器。 您不能在 Quarkus 服务器上“部署”多个应用程序,Quarkus 只是启动 TCP 套接字以服务一个应用程序的启动序列的一部分。
过去的应用程序服务器旨在通过单个 JVM 运行时在一台机器上部署/启动/停止多个应用程序,而无需停止 JVM。 Quarkus 和其他微服务框架以 Docker 运行时为目标,不再关心为多个应用程序启动和停止多个 JVM。他们也不关心需要停止和启动 JVM 以进行应用程序升级,而旧的应用程序服务器试图避免这种情况。
【讨论】:
这不是说它只用作嵌入式服务器吗? 是的,您可以将其视为嵌入式服务器。【参考方案4】:正如homepage 所说:
为 OpenJDK HotSpot 和 GraalVM 量身定制的 Kubernetes 原生 Java 堆栈,采用最佳的 Java 库和标准精心打造。
这还没有真正提供关于 quarkus 是否(除其他外)应用服务器。我知道it uses undertow。 post on the thorntail community wiki 表明 quarkus 是 thorntail 的精神继承者,因此实际上是一个嵌入式应用服务器。
【讨论】:
以上是关于quarkus 使用啥应用服务器?的主要内容,如果未能解决你的问题,请参考以下文章
」打造基于Quarkus的云原生微服务框架实践的理论知识基础