前言
Quarkus是一款有别于传统Java架构的新技术框架。它建立在我们熟知的技术栈上,使用了诸多成熟的技术,如JPA、JAX-RS、EclipseVert.x、Eclipse MicroProfile和CDI等,并将这些技术与Kubernetes紧密融合在一起。用户可以借助Kubernetes高效的调度运维能力,最大限度地节约资源。
云原生的星星之火,自开源社区的Kubernetes爆红之后,变成燎原之势,随后云原生相关的技术如雨后春笋般涌现。
本文采用十分简单的问题-解决方案-讨论的结构,细致透彻地描绘了Quarkus的技术点。通过本文,用户可以借助Quarkus提高Java相关的研发效率,从而在快节奏的微服务构建和基于云的应用程序开发领域立于不败之地。
目录
主要内容
全文总共包含16章的内容,由浅入深的解析Quarkus,Quarkus是一个相对较新的框架,又处于新的领域(原生Java和GraalVM)。我们想深入研究一些互联网上找不到的例子和实践。本文中没有需要理解的大型应用,所有的例子都是自包含的,可以随时使用。我们希望本文能够作为Quarkus开发的参考!
第1章Quarkus概述;Kubernetes已成为用于部署企业应用的事实平台。随着企业应用容器化和加速向Kubernetes平台迁移,原有的基于Java的应用程序在编码、部署和维护方式等方面发生了很大变化。如果不对Java应用程序做任何变更就直接容器化并运行,那么会遇到很多麻烦。由容器组成的Pod(Kubernetes中的一个术语)是Kubernetes中的基本调度单元,因此,为了避免入坑,深入理解如何正确地容器化Java应用程序是非常重要的。
Quarkus是一个集成了Kubernetes的开源云原生框架,基于ApacheLicense 2.0发布,用于创建适配GraalVM和OpenJDK HotSpot的Kubernetes原生应用,基于Hibernate、Eclipse MicroProfile、Kubernetes、Apache Camel和Eclipse Vert.x等流行库和技术构建。
Quarkus的优点包括可以与Docker和Kubernetes轻松集成,启动速度快,驻留集大小(RSS)内存消耗低,可提高开发者的生产力。本章概述Quarkus是什么,解决什么问题,如何与Kubernetes集成,为什么它会得到开发人员的喜爱,以及最值得关注的特性。
第2章搭建脚手架;在本章中,你将学习如何创建Quarkus的项目结构。Quarkus自带了一些不同的方法来搭建项目的脚手架。
本章涵盖以下主题:
- ·从Maven到VSCode IDE,用不同的方式来构建项目的脚手架
- ·通过实时重载改善开发者的体验
- ·使用Quarkus提供静态资源
第3章开发RESTful服务;Quarkus集成了RESTEasy,这是一种用于定义REST API的JAX-RS实现。在本章中,你将学习如何在Quarkus中开发RESTful Web服务。本章涵盖以下主题:
- ·如何使用JAX-RS来创建CRUD服务
- ·如何启用CORS向其他域请求资源
- ·如何实现响应式路由
- ·如何实现过滤器来操作请求和响应
第4章配置;本章涵盖以下主题:
- ·如何配置一个Quarkus服务
- ·如何在服务中注入配置参数
- ·如何在不同的环境中使用配置值
- ·如何正确配置日志系统
- ·如何创建自定义的配置系统
第5章编程模型;在本章中,你将会了解到与Quarkus编程模型相关的话题。Quarkus所遵循的编程模型是独特的,与其他框架不同的是,Quarkus允许你混合使用CDI命令式模型和SmallRye Mutiny响应式模型。第15章专门介绍了使用响应式模型的方法。有时,你可能会发现自己需要这两种模型,所以知道如何使用每种模型是件好事。
本章涵盖以下主题:
- ·如何对JSON和XML文档进行编组(marshal)和解组(unmarshal)
- ·如何校验请求参数
- ·如何使用CDI规范作为上下文和依赖注入的解决方案
- ·如何为Quarkus服务编写测试
第6章打包Quarkus应用程序;在本章中,你将学习如何将Quarkus应用程序打包为原生可执行文件或JVM可运行的文件,从而使其能够被分发和部署。如今,容器已成为应用程序发布的标准方式,所以你需要知道如何将Quarkus应用程序容器化。
本章涵盖以下主题:
- ·如何将Quarkus应用程序打包为JVM可运行的文件
- ·如何将Quarkus应用程序打包为原生可执行文件
- ·如何将Quarkus应用程序容器化
第7章持久化;你应该已经很熟悉。Quarkus所使用的持久化存储策略了,事务、数据源、Java Persistence API(JPA)等都是已经存在多年的标准了。
Quarkus使用了这些标准,并且在某些情况下,在它们的基础上做了扩展,使持久化存储的工作更加容易。在本章中,你将学习如何在Quarkus中使用持久化存储。本章涵盖了传统的关系型数据库管理系统(RDBMS)和NoSQL数据库。
如果你使用的是传统的RDBMS或MongoDB,那么Quarkus还提供了一些额外的功能,比如Panache,它提供了一种entity或record类型的API。Panache实现了许多标准的JPA语法,使你的应用程序更容易阅读和维护,可以帮助你提高工作效率。
本章涵盖以下主题:
- ·配置数据源
- ·处理事务
- ·管理数据库模式迁移
- ·使用Panache API
- ·与NoSQL数据库交互
第8章容错;在本章中,你将了解为什么需要容忍微服务架构中的故障。微服务架构严重依赖网络来运行,而网络作为一个关键的部分,并不总是运行良好,会出现网络故障、网线饱和、拓扑结构变化、下游服务更新等各种问题,因此微服务架构需要具备容错能力。
出于这个原因,构建对任何类型的问题都具有容错能力的服务,并提供优雅的解决方案,而不仅仅是传播错误,这一点非常重要。
本章涵盖以下主题:
- ·实现不同的弹性策略
- ·提供一些后备逻辑,以防出现错误
- ·正确配置容错参数
第9章可观察性;在本章中,你将了解可观察性,以及为什么它在微服务架构中很重要。可观察性通过观察一些参数(如错误代码、性能或任何一种业务指标)来反映系统是如何表现的。Quarkus集成了几种用于可观测性的技术。
本章涵盖以下主题:
- ·定义健康检查
- ·为监测系统提供衡量标准
- ·配置分布式跟踪,以便在网状结构中了解请求的概况
第10章与Kubernetes集成;到目前为止,我们一直在学习如何在裸机上开发和运行Quarkus应用,但是在Kubernetes集群中运行时Quarkus才能真正闪光。
在本章中,你将了解如何将Quarkus和Kubernetes集成以及用于在Kubernetes中开发和部署Quarkus服务的扩展。
Kubernetes成为部署应用程序的事实平台。为此,充分了解Kubernetes以及如何在其上正确开发和部署应用程序非常重要。
本章涵盖以下主题:
- ·构建和推送容器镜像
- ·生成Kubernetes资源
- ·部署一个Quarkus服务
- ·开发一个Kubernetes Operator
- ·在Knative中部署一个服务
第11章认证与授权;在本章中,你将会了解到应用程序安全的支柱——授权和认证,如何在Quarkus应用程序中工作。本章涵盖以下主题:
- ·文件支持的认证和授权方案
- ·数据库支持的认证和授权方案
- ·外部服务支持的认证和授权方案
第12章应用程序密钥管理;每一个应用程序都有需要保密的信息,这些信息可能包括数据库凭证、外部服务认证,甚至某些资源的位置。所有这些都统称为密钥。应用程序需要一个安全的地方来存储这些密钥,无论是在应用程序启动时还是在空闲时。在本章中,我们将讨论使用Kubernetes和Vault进行密钥管理。
第13章Quarkus REST客户端;使用任何基于服务的架构都不可避免地需要你与外部服务进行通信。这些服务可能是内部服务(你控制服务的生命周期,它们通常部署在同一个集群中)也可能是外部服务(第三方服务)。
如果这些服务是以RESTful Web服务的形式实现的,那么你需要一个客户端来与这些服务进行交互。Quarkus提供了两种方式来实现这一点;JAX-RS Web Client,这是标准的Java EE与RESTful服务通信的方式;MicroProfile REST Client,这是与RESTful服务通信的新方式。
本章涵盖以下主题:
- ·使用JAX-RS Web客户端与其他RESTful服务进行通信
- ·使用MicroProfile Rest Client与其他RESTful服务进行通信
- ·确保RESTful服务之间的通信
第14章使用Spring API开发Quarkus应用程序;到目前为止,你已经看到每个例子都是使用CDI注解开发的,如@Inject、@Produces、JAX-RS注解或Java EE Security注解。但是Quarkus也为一些最常用的Spring库提供了一个兼容层,以便你可以使用所有关于Spring框架的知识来开发Quarkus应用程序。
本章涵盖以下主题:
- ·Spring依赖注入
- ·Spring REST Web
- ·Spring Data JPA
- ·Spring Security
- ·Spring Boot配置
第15章使用响应式编程模型;我们都熟悉几十年来在企业软件开发中占主导地位的客户端-服务器(CS)架构。然而,我们最近在架构风格上发生了转变。除了标准的CS方法,还有消息驱动的应用程序、微服务、响应式应用程序,甚至无服务器应用程序!所有这些类型的应用程序都可以使用Quarkus创建。在下面的内容中,你将学习关于响应式编程模型、消息总线和流的知识。
第16章Quarkus的附加功能;本章包含了一些不适合放在其他章节中介绍的Quarkus功能。当然,这并不意味着它们没有用!本章涵盖以下主题:
- ·Quarkus的模板解决方案:Qute
- ·OpenAPI集成
- ·发送电子邮件
- ·调度功能
- ·应用程序数据缓存