iT邦幫忙

2024 iThome 鐵人賽

DAY 4
2

設定與安裝完成後,接下來的步驟通常是工程師們熟悉各框架與工具的第一步,建置一個簡單的「Hello World」專案。Quarkus 提供了多種建立專案的方式,這裡列舉幾個常見的選擇:

  1. 使用 IntelliJ IDEA 建置 Hello Quarkus 專案
  2. 使用 Quarkus CLI 建置 Hello Quarkus 專案
  3. 使用 Code.quarkus.io 建置 Hello Quarkus 專案

使用 IntelliJ IDEA 建立 Quarkus 專案

安裝 Quarkus Plugins

  • 首先確保在 IntelliJ IDEA 中安裝了 Quarkus Plugins。此Plugins提供了一系列開發 Quarkus 專案的方便功能:
    • 專案建置:提供簡易界面來建立新專案,幫助開發者快速上手。
    • 程式碼輔助功能:自動完成、檢查及行標記,特別有助於開發與維護 Quarkus 應用。
    • 配置文件支援:自動完成 YAML/Properties 配置文件的編寫。
    • 運行配置:透過按幾個按鈕,即可輕鬆運行並檢查應用的狀態。

https://ithelp.ithome.com.tw/upload/images/20240905/20115895zVQhfYPl3H.png

建立專案

在 IntelliJ 中建立新專案時,你會在左側的 Generators 頁面看到 Quarkus 選項,選取後依照提示填寫相關資訊,點選「Next」進行下一步。

https://ithelp.ithome.com.tw/upload/images/20240905/201158959yl2NKVYuc.png

接下來,你將看到 擴展(Extensions) 的選擇界面。這裡列舉幾個常見的擴展:

  • Web
    • quarkus-resteasy-reactive:提供 RESTful Web 服務的支援
    • quarkus-resteasy-reactive-jackson:讓你可以使用 Jackson 進行 JSON 序列化和反序列化,是處理 JSON 格式資料的標準選擇。
  • Data
    • quarkus-jdbc-postgresql: 簡化 JDBC 的使用 PostgreSQL 資料庫。
  • Messaging
    • quarkus-smallrye-reactive-messaging:用於處理消息傳遞的擴展,適合需要整合消息中間件(例如 Kafka、AMQP)的微服務。
  • Observability
    • quarkus-smallrye-opentracing:為微服務添加分佈式追蹤支持,可以幫助你追踪跨服務的請求流程。
    • quarkus-smallrye-metrics:提供應用程式的度量指標,適合需要監控微服務運行狀況的場景。

https://ithelp.ithome.com.tw/upload/images/20240905/20115895WmUu4zRACE.png

在這裡,由於我們的目的是運行一個基本的 Quarkus 專案,因此不需特別選擇擴展,直接生成專案即可。建立後你可以稍微看一下預設它會帶哪些dependencies

預設依賴項目

enforcedPlatform("${quarkusPlatformGroupId}:${quarkusPlatformArtifactId}:${quarkusPlatformVersion}"):用於強制執行 Quarkus 平台的 BOM(Bill of Materials),確保所有 Quarkus 相關的依賴項都使用相同的版本,以避免版本衝突。(這些值定義在gradle.properties**)**

io.quarkus:quarkus-arc : 為 Quarkus 應用程序引入了 Arc,它是 Quarkus 的 CDI(Contexts and Dependency Injection)實作。這個依賴項使你能夠在 Quarkus 應用中使用依賴注入、範圍管理和其他 CDI 功能。

io.quarkus:quarkus-rest: 提供基於 JAX-RS 的 RESTful API 支持

io.quarkus:quarkus-junit5: 允許你撰寫和執行針對 Quarkus 應用的單元測試,並提供了一些針對 Quarkus 的測試注解和功能。


dependencies {
    implementation enforcedPlatform("${quarkusPlatformGroupId}:${quarkusPlatformArtifactId}:${quarkusPlatformVersion}")
    implementation 'io.quarkus:quarkus-arc'
    implementation 'io.quarkus:quarkus-rest'
    testImplementation 'io.quarkus:quarkus-junit5'
    testImplementation 'io.rest-assured:rest-assured'
}

編譯專案

你可以使用 Gradle 來編譯專案,直接在 IntelliJ 的 Gradle 工具欄中點選「Build」按鈕進行編譯。當看到「Build Success」的提示時,即表示編譯成功。

https://ithelp.ithome.com.tw/upload/images/20240905/20115895HuZsy3ntQl.png

編譯完後下述視窗就會檢視Build Sucess

https://ithelp.ithome.com.tw/upload/images/20240905/201158952vdtVmyn58.png

執行專案

建議使用 ./gradlew quarkusDev 指令來運行 Quarkus 應用。在終端機輸入這個指令後,你應該會看到服務成功啟動的訊息:

https://ithelp.ithome.com.tw/upload/images/20240905/20115895Ou9il5j2hz.png

此訊息表示你的 Quarkus 應用在 JVM 模式下運行,並監聽 http://localhost:8080

https://ithelp.ithome.com.tw/upload/images/20240905/20115895JJKt6mxnzx.png

驗證運行結果

開啟瀏覽器並輸入 http://localhost:8080,你將看到 Quarkus 的歡迎頁面。在頁面中,點選「VISIT THE DEV UI」,再點選左側的 API 插頭圖示,即可查看已建立的 RESTful API 列表。

https://ithelp.ithome.com.tw/upload/images/20240905/20115895eL3XqhckcS.png

可以點選VISIT THE DEV UI,接著點選左邊插頭的Endpoint,即可看到RESTful API List,

https://ithelp.ithome.com.tw/upload/images/20240905/20115895lK1CfBPiYS.png

點下去就會看到分頁打hello API

https://ithelp.ithome.com.tw/upload/images/20240905/20115895nbV2rmdihA.png

JVM 模式 vs GraalVM 模式

雖然 Quarkus 可以以 GraalVM 的原生映像方式運行,但目前應用還在 JVM 模式下運行。在後續章節中,我們將探討如何使用 GraalVM 來提升啟動速度和減少記憶體佔用。

2024-08-31 19:33:11,671 INFO  [io.quarkus] (Quarkus Main Thread) hello-quarkus 1.0-SNAPSHOT on JVM (powered by Quarkus 3.14.1) started in 2.663s. Listening on: http://localhost:8080

使用code.quarkus.io建置專案

Code.quarkus.io 是 Quarkus 官方提供的一個快速生成 Quarkus 專案的網站。它主要的目的是讓開發者能夠迅速開始一個新的 Quarkus 應用程式,無需手動設置環境或依賴項。我覺得某個層面來說,對初學者還算友善。

主要功能有

  • 專案配置:開發者可以通過簡單的表單填寫 GroupArtifact 和選擇構建工具(如 Maven 或 Gradle),來定義專案的基本結構。
  • 擴展選擇:網站提供豐富的 Quarkus 擴展(Extensions)供選擇,這些擴展可以添加特定的功能到專案中。例如,REST API、資料庫整合、消息驅動、觀測性等。使用者可以通過搜尋擴展名稱或類別來選擇需要的功能模組。
  • 預設模板:Code.quarkus.io 還提供了多個預設的擴展組合,例如:
    • 微服務與資料庫(Microservice with database)
    • 基於 Kafka 的事件驅動服務
    • 命令行工具
    • AI 服務等

以上設置完後,開發者可以一鍵生成專案,並下載一個打包好的 .zip 文件。下載後,專案可以直接在本地解壓並開發。另外也可以直接push到github repository。

以下是他的操作介面,

  1. Group、Artifact 和 Build Tool

    1. Group: 這是 Maven 專案中的 groupId,通常代表組織名稱或應用的命名空間,圖中是 org.acme
    2. Artifact: 這是專案的名稱,類似於 Maven 中的 artifactId,在這裡為 code-with-quarkus
    3. Build Tool: 在此選擇要使用的構建工具,預設值是 Maven,但也可以選擇 Gradle
  2. Extensions Preset

    允許使用者從已配置好模板,直接快速生成專案

    • Microservice with database : 建置一個與資料庫集成的微服務應用,通常會預設包含一些與資料庫相關的擴展,例如 JPA、JDBC。
    • Command-line tool: 建置命令行工具的 Quarkus 專案,適合開發 CLI 應用。
    • Web app with Model-View-Controller: 建置 MVC 架構的 Web 應用,通常使用 RESTEasy、Thymeleaf 或其他 MVC 框架。
    • Web app with NPM UI: 建置包含 NPM 用戶界面的 Web 應用,適合使用 JavaScript 前端框架(如 React、Vue)。
    • Web app with ServerSide Rendering: 建置支援服務端渲染的 Web 應用,可結合 Java 和前端模板。
    • AI Infused service: 建置具備人工智慧能力的應用,預設包含一些適合 AI 或機器學習的擴展。

https://ithelp.ithome.com.tw/upload/images/20240905/20115895wgqoxt5CKs.png

如果你不想用模板,可自行展開 View the full list of available extensions,以下是截圖中部分擴展的提出幾項做簡單介紹

  • REST [quarkus-rest] : 提供了一個基於 Jakarta REST 的實現,使用了編譯時處理和 Vert.x。這是 Quarkus 提供的核心 REST 擴展之一,可以用來快速建立 REST API 服務。
  • REST Jackson [quarkus-rest-jackson] : 提供 Jackson 支持,主要用來進行 JSON 的序列化和反序列化。這是 Web 開發中常用的 JSON 處理工具。
  • REST Client [quarkus-rest-client]
  • 提供 REST 客戶端支持,允許 Quarkus 應用發送 HTTP 請求並調用其他服務。

https://ithelp.ithome.com.tw/upload/images/20240905/20115895VI2bvD83hj.png

這些Extensions允許開發者根據需要靈活選擇適合的工具來處理各種 Web 請求、數據格式等等,從而打造功能強大且靈活的 Quarkus 應用程式。

總結來說,Quarkus 提供了多種方便開發者快速入門的工具與方式,無論是使用 IntelliJ IDEA、Quarkus CLI 或 Code.quarkus.io,都能讓你迅速建立並運行一個 Quarkus 專案。此外,Quarkus 還提供了強大的Extensions,無論你是在本地開發還是計劃部署到生產環境,都能夠在短時間內完成設定。


上一篇
設置IDE( IntelliJ IDEA)
下一篇
BasicGradle 介紹
系列文
微服務奇兵:30天Quarkus特訓營30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言