1.5 Quarkus 的架构和核心概念
当应用 Quarkus 框架时,很多功能都已经打包封装,非常易于开发。这些封装的功能就是由基础的 Quarkus 扩展组件组成的。在 Quarkus 运行时,几乎所有的部分都已经配置好,启动时仅应用运行时配置属性(如数据库URL)即可。
所有元数据都是由扩展部分计算和管理的,Quarkus 框架的架构图如图1-2所示。
图1-2 Quarkus 框架的架构图
Quarkus 框架的架构分为 3个层次,分别是 JVM平台层、Quarkus 核心框架层和 Quarkus Extensions框架层。
1.JVM平台层
JVM平台层主要包括HotSpot VM和SubstrateVM。
HotSpot VM 是 Sun JDK 和 OpenJDK 中的虚拟机,也是目前使用范围最广的 Java 虚拟机。它是JVM实现技术,与以往的实现方式相比,在性能和扩展能力上得到了很大的提升。
SubstrateVM主要用于Java虚拟机语言的AOT编译,SubstrateVM的启动时间和内存开销非常少。SubstrateVM的轻量特性使其适合嵌入其他系统中。
2.Quarkus 核心框架层
Quarkus 核心框架层包括 Jandex、Gizmo、GraalSDK、Arc、Quarkus Core 等。其中,Jandex是JBoss的库。Gizmo是Quarkus 开源的字节码生成库。GraalVM是以Java HotSpot虚拟机为基础,以 Graal 即时编译器为核心,以能运行多种语言为目标,包含一系列框架和技术的大集合基础平台。这是一个支持多种编程语言的执行环境,比如 JavaScript、Python、Ruby、R、C、C++、Rust 等语言,可以显著地提高应用程序的性能和效率。GraalVM 还可以通过 AOT(Ahead-Of-Time)编译成可执行文件来单独运行(通过 SubstrateVM)。Arc(DI)是Quarkus 的依赖注入管理,其内容是io.quarkus.arc,这是CDI的一种实现。
3.Quarkus Extensions框架层
Quarkus Extensions框架层包括RESTEasy、Hibernate ORM、Netty、Eclipse Vert.x、Eclipse MicroProfile、Apache Camel等外部扩展组件。Quarkus 常用的外部扩展组件如图1-3所示。
图1-3 Quarkus 常用的外部扩展组件
下面简单介绍后续案例中会使用到的外部扩展组件。
Eclipse Vert 扩展组件:该组件是 Quarkus 的网络基础核心框架扩展组件。本书大部分案例都与其相关,但由于该扩展组件位于底层,故开发者一般不会察觉。
RESTEasy 扩展组件:RESTEasy 框架是 JBoss 的一个开源项目,提供了各种框架来帮助构建RESTful Web Services和RESTful Java应用程序框架。在后续的案例中,基本上也会用到该扩展组件。
Hibernate扩展组件:这是对关系型数据库进行处理的ORM框架集成,遵循JPA规范。
Eclipse MicroProfile扩展组件:会在响应式和消息流中使用该扩展组件。
Elytron 扩展组件:主要用于安全类的扩展,包括 elytron-security-jdbc、elytron-security-ldap、elytron-security-oauth2等。
Keycloak 扩展组件:这是应用 Keycloak 开源认证授权服务器的扩展组件,包括 quarkus-keycloak-authorization、quarkus-oidc等。
SmallRye扩展组件:这是响应式客户端的扩展组件,SmallRye是一个响应式编程库。
Narayana扩展组件:这是处理数据库事务的扩展组件。
Kafka扩展组件:这是应用Kafka开源消息流平台的扩展组件。
Artemis扩展组件:这是应用Artemis开源消息服务器中间件的扩展组件。
Agroal扩展组件:这是数据库连接池的扩展组件。
Redis扩展组件:这是应用Redis开源缓存服务器的扩展组件。
Spring扩展组件:这是应用Spring框架的扩展组件。
Kubernetes扩展组件:这是应用Kubernetes服务器的扩展组件。
另外,关于JSON集成的扩展组件有Jackson、JAXB等。