本文由 简悦 SimpRead 转码, 原文地址 www.toutiao.com
它建立在我们熟知的技术栈上,使用了诸多成熟的技术,如 JPA、JAX-RS、EclipseVert.x、Eclipse MicroProfile 和
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 集成
- · 发送电子邮件
- · 调度功能
- · 应用程序数据缓存
需要这份 2021 年全新 java 架构技术框架【Quarkus 实战:专为 Kubernetes 而优化的 Java 解决方案】神仙文档的小伙伴,可以转发此文关注小编,私信小编【学习】二字来获取!
显然,我们希望每个人都能阅读本文!不过,我们的目标读者需要:
- 熟悉 Java 和应用程序开发。
- 了解传统的软件开发。
- 经常将服务部署到机器集群或云中。