Chuyển đến nội dung chính

第一課:什麼是 Quarkus? — 用於微服務的 Supersonic Subatomic Java

Quarkus 概述、建置時最佳化架構、Quarkus 與 Spring Boot 微服務比較、Quarkus 擴充生態系統、<1 秒啟動示範。

💻 程式設計 — 第 0 課 第一課:什麼是 Quarkus? — 超音速 微服務的亞原子 Java

Quarkus 微服務:從基礎知識到生產

第 1 部分:Quarkus 平台和專案設置

亞洲開發網

簡介

在雲端原生世界中,啟動速度和記憶體消耗決定了運行微服務系統的成本。 Quarkus——「Supersonic Subatomic Java」——是紅帽專門為 Kubernetes 和 GraalVM 從頭開始開發的框架,能夠在 1 秒內啟動,並且在本機模式下僅使用約 50MB 的 RAM。

本系列將帶您從第一篇「Hello World」文章開始,了解一個由 5 個在生產中運作的微服務組成的電子商務系統。

什麼是誇庫斯?

Quarkus 是一個 Kubernetes 原生 Java 框架,專為 JVM (HotSpot) 和 GraalVM Native Image 設計。目標:幫助 Java 成為無伺服器、微服務和基於容器的工作負載的領先語言。

突出特點

特點描述
建置時最佳化在建置時而不是執行時進行依賴性分析、配置、註解處理
開發服務開發/測試時自動啟動 PostgreSQL、Kafka、Keycloak 和 Testcontainers
即時編碼更改程式碼→儲存→刷新瀏覽器,無需重新啟動
統一命令式+反應式在同一項目中支援阻塞(命令式)和非阻塞(反應式)
GraalVM Native編譯為本機執行檔-啟動 <50ms, RAM ~50MB
擴展生態系600 多個擴充滿足各種需求:Hibernate、Kafka、gRPC、Keycloak...

建置時優化架構

與 Spring Boot 在 運行時 處理所有事情(類路徑掃描、反射、代理生成)不同,Quarkus 在 構建時 完成大部分工作:

┌─────────────────────────────────────────────────┐
│              TRADITIONAL FRAMEWORK              │
│                                                 │
│  Start JVM → Load Classes → Scan Classpath →    │
│  Process Annotations → Build Dependency Graph → │
│  Create Proxies → Ready (~5-30 giây)           │
└─────────────────────────────────────────────────┘

┌─────────────────────────────────────────────────┐
│              QUARKUS (Build-Time)                │
│                                                 │
│  BUILD: Scan → Analyze → Generate Bytecode →    │
│         Create Static Init Code                 │
│                                                 │
│  RUN:   Load Pre-computed Metadata → Ready      │
│         (~0.5-1 giây JVM, <0.05 giây Native)   │
└─────────────────────────────────────────────────┘

為什麼建置時間對微服務很重要?

  1. 快速橫向擴充 — Kubernetes 需要在幾秒鐘內啟動新的 Pod
  2. Serverless/FaaS-冷啟動決定使用者體驗
  3. Resource efficiency — 100 micro-instances x 50MB << 100 x 500MB
  4. 成本優化 — 根據CPU/RAM使用情況計算雲端計費

Quarkus 與 Spring Boot — 現實比較

標準夸克斯 3.xSpring Boot 3.x
Startup (JVM)~0.5-1s~3-8s
Startup (Native)~0.02-0.05s~0.1-0.3s (Spring AOT)
RSS Memory (JVM)~80-120MB~200-400MB
RSS Memory (Native)~30-60MB~80-150MB
Dev ExperienceDev Services, Live Coding, Dev UISpring DevTools, Initializr
Ecosystem600+ extensions300+ starters
社​​群成長壯大非常大,成熟
學習曲線平均(CDI、MicroProfile)低(熟悉)
本機支援一流,問題少已有很大改進,但仍然有限
ReactiveMutiny (native) + Vert.xWebFlux (Project Reactor)

什麼時候選擇 Quarkus?

  • 為 Kubernetes 建構新的微服務(綠地)
  • 無伺服器/FaaS 需要快速啟動
  • 想要最佳化雲端成本(更少的 RAM、更少的 CPU)
  • 團隊熟悉 Jakarta EE / MicroProfile
  • 需要 GraalVM 的本機可執行檔

什麼時候選擇Spring Boot?

  • 將現有的整體遷移到微服務
  • 團隊擁有深厚的Spring經驗
  • 需要大型生態系統和大型社區支持
  • 應用程式啟動時間並不重要

CDI 和 MicroProfile — 標準平台

Quarkus 基於兩個開放標準,而不是專有 API:

CDI (Contexts and Dependency Injection)

CDI 是依賴注入的 Jakarta EE 標準。 Quarkus 使用 ArC — CDI 引擎在建置時進行處理:

// Injection cơ bản
@ApplicationScoped  // Singleton trong app
public class ProductService {

    @Inject
    ProductRepository productRepo;

    @Inject
    @ConfigProperty(name = "app.max-products",
        defaultValue = "1000")
    int maxProducts;

    public List<Product> 列表活動(){
        返回productRepo.findActive();
    }
}

// 流行的 CDI 範圍
@ApplicationScoped // 1 個實例/應用程式
@RequestScoped // 1 個實例/HTTP 請求
@SessionScoped // 1 個實例/會話
@Dependent // 每次注入都是新的
@Singleton // 類似 @ApplicationScoped 但沒有代理

ArC 與 Spring DI:ArC 在建置時分析整個依賴關係圖 → 刪除未使用的 bean → 減少記憶體 + 啟動。

MicroProfile

微服務規範集,由 Quarkus 完全實作:

規格誇庫斯擴充功能
ConfigBuilt-inType-safe configuration, multiple sources
REST Clientquarkus-rest-clientType-safe HTTP client
Fault Tolerancequarkus-smallrye-fault-tolerance@Retry, @CircuitBreaker, @Fallback
Healthquarkus-smallrye-healthLiveness, Readiness, Startup probes
Metricsquarkus-micrometerApplication & JVM metrics
OpenAPIquarkus-smallrye-openapiSwagger documentation
JWT Authquarkus-smallrye-jwtJWT token parsing & validation
OpenTelemetryquarkus-opentelemetryDistributed tracing

優點:根據 MicroProfile 規範編寫的程式碼在 Quarkus、Open Liberty、Payara、WildFly 之間可移植。

Quarkus 3.34 — 最新功能 (2026)

特點描述
Virtual Threads (Loom)@RunOnVirtualThread — 命令式程式碼的非阻塞效能
開發服務2.0自動配置任何容器,而不僅僅是內建容器
Unified CLIquarkus dev, quarkus build, quarkus deploy
改進的原生建置時間減少約 40%,支援更多函式庫
WebSocket 下一個新的、註解驅動的 WebSocket 伺服器/客戶端 API
Langchain4jAI/LLM integration native
Hibernate ORM 7Jakarta Persistence 3.2, improved performance
Security improvementsOIDC multi-tenancy, fine-grained RBAC
// 虛擬執行緒-Quarkus 3.x 中的新增功能
@Path(“/api/v1/產品”)
公共類產品資源{

    @GET
    @RunOnVirtualThread // 在虛擬執行緒上運行
    公共列表<Product> 列表產品() {
        // 阻塞程式碼但不阻塞作業系統線程
        返回 Product.listAll();
    }
}

Quarkus Extensions Ecosystem

擴充是 Quarkus 整合庫的方式。每個擴充功能都針對建置時處理進行了最佳化:

# 尋找擴充名
quarkus 擴充列表
quarkus 擴充列表 --search=postgres

# 為專案新增擴展
quarkus 擴充功能加入 quarkus-rest-jackson
quarkus 擴充功能加入 quarkus-hibernate-orm-panache
quarkus 擴充功能加入 quarkus-jdbc-postgresql
quarkus 擴充功能加入 quarkus-oidc
quarkus 擴充加入 quarkus-smallrye-reactive-messaging-kafka

本系列的主要擴展

擴充功能
quarkus-rest-jacksonREST API with JSON serialization
quarkus-hibernate-orm-panache簡化的 ORM(活動記錄/儲存庫)
quarkus-jdbc-postgresqlJDBC driver cho PostgreSQL
quarkus-flywayDatabase schema migration
quarkus-oidcOpenID Connect / Keycloak integration
quarkus-smallrye-reactive-messaging-kafkaApache Kafka messaging
quarkus-grpcgRPC server/client
quarkus-smallrye-fault-toleranceCircuit Breaker, Retry, Fallback
quarkus-opentelemetryDistributed tracing
quarkus-micrometer-registry-prometheusPrometheus 的指標
quarkus-smallrye-healthHealth checks
quarkus-redis-clientRedis caching
quarkus-kubernetesAuto-generate K8s manifests
quarkus-container-image-jibBuild container image

示範:Hello Quarkus — 首次啟動

# 安裝 Quarkus CLI(需要 Java 17+)
# macOS
沖泡安裝quarkusio/tap/quarkus

# Linux (SDKMAN)
sdk安裝quarkus

# 建立專案
quarkus 建立應用程式 com.xdev:hello-quarkus \
  --extension='rest-jackson' \
  --java=21

cd 你好誇庫斯

# 運行開發模式
誇庫斯開發者

結果:

__ ____ __ _____ ___ __ ____ ______
 --/ __ \/ / / / _ | / _ \/ //_/ / / / __/
 -/ /_/ / /_/ / __ |/ , _/ ,< / /_/ /\ \
--\___\_\____/_/ |_/_/|_/_/|_|\____/___/
2026-04-03 10:00:00,123 INFO  [io.quarkus] (Quarkus Main Thread)
  hello-quarkus 1.0.0-SNAPSHOT on JVM (powered by Quarkus 3.34.x)
  started in 0.876s. Listening on: http://localhost:8080

Tests paused
Press [h] for more options>

0.876 秒 — 相較之下,同等 Spring Boot 則需要 5-10 秒。

Hello REST Endpoint

包 com.xdev;

導入 jakarta.ws.rs.GET;
導入 jakarta.ws.rs.Path;
導入 jakarta.ws.rs.Produces;
導入 jakarta.ws.rs.core.MediaType;

@路徑(“/你好”)
公共類別 GreetingResource {

    @GET
    @Produces(MediaType.TEXT_PLAIN)
    公共字串你好(){
        return「來自 Quarkus 的你好!」;
    }
}
捲曲 http://localhost:8080/hello
# 來自誇庫斯的問候!

電子商務系統架構(預覽版)

在本系列中,我們將建構:

┌──────────────┐ ┐──────────────┐ ┐────────────┐
│ 瀏覽器 / │────▶│ API 閘道 │────▶│ Keycloak │
│ 行動應用程式 │ │ (Nginx) │ │ (Auth) │
└──────────────┘ └──────┬────────┘ └──────────────┘
                           │
          ┌────────────────┼────────────────┐
          │ │ │
          ▼ ▼ ▼
   ┌──────────┐ ┌──────────┐ ┌──────────┐
   │ 商品 │ │ 訂單 │ │ 付款 │
   │ 服務 │ │ 服務 │ │ 服務 │
   │ │ │ │ │ │
   │ 誇庫斯 │ │ 誇庫斯 │ │ 誇庫斯 │
   │ REST+gRPC│ │ REST │ │ REST │
   └────┬──────┘ └────┬──────┘ └────┬──────┘
        │ │ │
        ▼ ▼ ▼
   ┌──────────┐ ┌──────────┐ ┌──────────┐
   │PostgreSQL│ │PostgreSQL│ │PostgreSQL│
   │(商品)│ │(訂單) │ │(付款)│
   └──────────┘ └──────────┘ └──────────┘
                        │
                   ┌────┴────┐
                   │ 卡夫卡 │
                   │ (活動)│
                   └────┬────┘
                        │
                        ▼
                ┌────────────┐
                │ 通知 │
                │ 服務 │
                │ (誇庫斯) │
                └────────────┘

5 Services:

  1. 產品服務 — 管理產品、類別、庫存
  2. 訂單服務——訂單處理、狀態機
  3. 支付服務——付款、交易日誌
  4. Notification Service — Email/SMS notifications
  5. User Service (Keycloak) — Identity & Access Management

## 鍛煉

  1. 在本機上安裝 JDK 21+ 和 Quarkus CLI 2.創建Quarkus項目,擴展名為 rest-jackson
  2. 寫入端點 GET /api/info 返回 JSON {"framework": "Quarkus", "version": "3.34"}
  3. 比較 Quarkus 與同等 Spring Boot 專案之間的啟動時間
  4. 嘗試注入 @ConfigProperty 並改變其中的值 application.properties — 觀察即時重新加載
  5. 列出所有可用的擴充: quarkus extension list --search=rest — 選擇 3 個您想了解的擴充

需要記住的關鍵概念

┌──────────────────────────────────────────────────────────┐
│ Quarkus 心智模型 │
│ │
│ ┌────────────┐ ┐──────────────┐ │
│ │ 建置時間 │────▶│ 運作時間 │ │
│ │ │ │ │ │
│ │ • 類別路徑 │ │ • 載入預先載入 │ │
│ │ 扫描 │ │ 计算 │ │
│ │ • 注释 │ │ 元数据 │ │
│ │ 处理 │ │ • 执行 │ │
│ │ • 字节码 │ │ 静态 │ │
│ │ 生成 │ │ 初始化 │ │
│ │ • 死程式碼 │ │ • 啟動 HTTP │ │
│ │ 移除 │ │ 服务器 │ │
│ │ │ │ │ │
│ │ (慢速,一次)│ │ (快!) │ │
│ └──────────────┘ └──────────────┘ │
│ │
│ 雅加达 EE 标准 MicroProfile 标准 │
│ ┌──────────────┐ ┌──────────────────────┐ │
│ │ • CDI (ArC) │ │ • 配置 │ │
│ │ • 雅加達REST │ │ • REST 用戶端 │ │
│ │ • 持久性 │ │ • 容错 │ │
│ │ • Bean 驗證│ │ • 運作狀況/指標 │ │
│ │ • 安全性 │ │ • OpenAPI / JWT │ │
│ └──────────────────┘ └────────────────────┘ │
└──────────────────────────────────────────────────────────┘

總結

  • Quarkus 是專為雲端原生和 Kubernetes 設計的 Java 框架
  • 建置時最佳化有助於啟動 <1 秒,低 RAM
  • 開發服務 在開發過程中自動設定基礎設施
  • 與 Spring Boot 相比:Quarkus 更快、更輕,但 Spring Boot 有更大的生態系統
  • 本系列建構了一個實用的電子商務平台系統,包含5個微服務

下一篇文章:建立 Quarkus 專案 — CLI、開發模式、開發 UI 和即時編碼。