專案涵蓋 Quarkus API、GCP Datastore、Pub/Sub、Apache Camel、測試、Kubernetes 佈署 相關技術,據此規劃 Lab 和 Skill Approve。
目標 : 讓學員熟悉 Quarkus API、GCP Datastore、Pub/Sub、Apache Camel、測試、Kubernetes 部署
本 POC 旨在讓越南 IT 新進人員快速上手 GCP 及 Quarkus,並能夠開發、測試、部署一個完整的雲端應用。考量到部分學員可能基礎較弱,課程將從 零開始(0 到 1),循序漸進,確保每位學員都能夠理解與應用。
目標
開發一個 雲端推播系統。此系統將會處理來自不同系統的推播訊息,並透過 Pub/Sub 傳遞,最終存入 Datastore,供後續查詢與分析。
🔹 目標:理解 Quarkus 核心概念與響應式設計
🛠 Lab
1️⃣ 同步 vs 非同步 vs 響應式
• 阻塞 / 非阻塞 I/O
• 使用 CompletableFuture / Mutiny 進行非同步處理
2️⃣ Quarkus 環境搭建
• 建立第一個 Quarkus REST API
• Quarkus Dev Mode 開發體驗
🎯 Skill Approve
✅ 理解阻塞、非阻塞差異
✅ 理解同步、非同步、響應式的差異
✅ 使用 Quarkus 建立 REST API
🔹 目標:使用 Quarkus 建立 REST API,實作 DTO 與錯誤處理
🛠 Lab
1️⃣ 建立 Quarkus API
• POST /messages API 開發
• 解析 MessageDto,轉換為 MessageEventDto
2️⃣ Quarkus 例外處理
• 使用 ExceptionMapper 處理錯誤回應
• 設計錯誤代碼與回應結構
3️⃣ OpenAPI 與 Swagger
• 整合 quarkus-smallrye-openapi
• 自動生成 API 文件
🎯 Skill Approve
✅ 能夠開發 Quarkus REST API
✅ 能夠處理異常並返回適當的錯誤資訊
✅ 能夠使用 Swagger UI 產生 API 文件
🔹 目標:掌握 Quarkus 的依賴注入與環境配置
🛠 Lab
1️⃣ Quarkus CDI
• 介紹 Quarkus 的 DI(Contexts and Dependency Injection)
• 使用 @Inject 與 @ApplicationScoped 管理依賴
2️⃣ Config Profiles
• application.yaml 與環境變數管理
• @ConfigProperty 動態配置應用程式
🎯 Skill Approve
✅ 能夠使用 Quarkus CDI 進行依賴管理
✅ 能夠根據環境變數動態配置應用程式
🔹 目標:使用 Mutiny 開發非同步 API
🛠 Lab
1️⃣ Mutiny 基礎
• 介紹 Uni 與 Multi
• 轉換同步 API 為非同步 API
2️⃣ 非同步 API 開發
• 使用 Mutiny 進行非同步訊息處理
• 錯誤處理與重試機制
🎯 Skill Approve
✅ 理解 Uni / Multi 的概念
✅ 能夠開發 Quarkus 響應式 API
🔹 目標:了解 Quarkus 擴展機制,學習如何模組化應用並管理依賴
🛠 Lab
1️⃣ 使用 Quarkus Extensions 擴展應用功能(如 Quarkus Scheduler、Cache)
2️⃣ 建立 Quarkus 模組化應用,拆分不同業務邏輯到獨立模組
3️⃣ 使用 @RegisterForReflection 了解 GraalVM 對反射的處理
🎯 Skill Approve
✅ 能夠使用 Quarkus Extensions 擴展應用
✅ 能夠拆分 Quarkus 應用為不同模組,提高可維護性
✅ 了解 Quarkus 在 GraalVM 環境下的反射管理
🔹 目標:學習 Quarkus 如何處理非同步邏輯,並運用 Mutiny 強化併發能力
🛠 Lab
1️⃣ 使用 @Blocking 和 @NonBlocking 控制執行緒模型
2️⃣ 使用 Mutiny 進行非同步計算與串聯
3️⃣ 利用 Quarkus Scheduler 建立排程任務
🎯 Skill Approve
✅ 了解 Quarkus 內建的非同步與阻塞控制
✅ 能夠使用 Mutiny 建立非同步與併發邏輯
✅ 能夠設定 Quarkus Scheduler 來處理定時任務
🔹 目標:學習 Quarkus 身份驗證與授權機制,使用 JWT 保護 API
🛠 Lab
1️⃣ 使用 Quarkus Security 擴展(如 quarkus-oidc)進行身份驗證
2️⃣ 建立 JWT-based API 安全機制,限制不同角色存取
3️⃣ 使用 @RolesAllowed、@PermitAll 等方式進行權限控管
🎯 Skill Approve
✅ 能夠使用 Quarkus Security 擴展進行身份驗證
✅ 了解 JWT 在 Quarkus API 安全性中的應用
✅ 能夠設定 API 權限控管
🔹 目標:了解 Part 2 會用到的 GCP 服務,學習如何將 Quarkus 應用與這些工具整合
🛠 Lab
1️⃣ Pub/Sub 概念(事件驅動架構、訊息保證、Quarkus 整合)
2️⃣ Datastore 概念(NoSQL vs SQL、如何存取、常見模式)
🎯 Skill Approve
✅ 了解 Quarkus 如何與 Pub/Sub 進行事件驅動開發
✅ 了解 Datastore 的基本存取模式與適用場景
🔹 目標:建立 Quarkus API,提供 RESTful 服務,處理訊息發送到 Pub/Sub
🔹 專案關聯:📂 message-gateway → EventStoreClient.java、ManagementClient.java
🛠 Lab
1️⃣ 建立 Quarkus API,實作 POST /messages
2️⃣ 整合 Pub/Sub,使用 GCPPubSubMessageRouteBuilder 發送訊息
3️⃣ 實作異常處理,使用 GatewayResponseExceptionMapper 處理錯誤回應
🎯 Skill Approve
✅ 能夠使用 Quarkus 建立 RESTful API
✅ 能夠解析 DTO 並轉換為 Pub/Sub 訊息
✅ 能夠處理異常並返回適當的錯誤資訊
🔹 目標:熟悉 Datastore 讀寫操作,能夠透過 API 進行 CRUD
🔹 專案關聯:📂 message-gateway → MappingStoreClient.java、IdMappingDto.java
🛠 Lab
1️⃣ 實作 PUT /id-mappings,使用 MappingStoreClient 儲存 IdMappingDto
2️⃣ 實作 GET /id-mappings/{id},查詢 Datastore
3️⃣ 新增錯誤處理,當 ID 不存在時返回 404 NOT FOUND
🎯 Skill Approve
✅ 能夠在 Quarkus API 中使用 GCP Datastore
✅ 能夠讀寫 IdMappingDto 並進行 CRUD
✅ 能夠處理 Datastore 例外錯誤
🔹 目標:學習 Apache Camel,建立訊息流轉 Route
🔹 專案關聯:
📂 message-gateway → GCPPubSubMessageRouteBuilder.java、KafkaMessageRouteBuilder.java
🛠 Lab
1️⃣ 實作 GCPPubSubMessageRouteBuilder,從 API 取得訊息後發送到 Pub/Sub
2️⃣ 實作 KafkaMessageRouteBuilder,將訊息發送到 Kafka(如果未刪除)
3️⃣ 測試 Camel Route,確保訊息流轉正常
🎯 Skill Approve
✅ 能夠在 Quarkus API 中使用 GCP Datastore
✅ 能夠讀寫 IdMappingDto 並進行 CRUD
✅ 能夠處理 Datastore 例外錯誤
📅 Day 8-9:Quarkus 測試
🔹 目標:學會如何撰寫 Quarkus 測試,確保 API 與 Camel Route 正確
🔹 專案關聯:📂 message-gateway → test 目錄
🛠 Lab
1️⃣ 使用 @QuarkusTest 撰寫 MessageGatewayTest
2️⃣ 使用 RestAssured 測試 POST /messages
3️⃣ 使用 Mock 測試 ManagementClient
🎯 Skill Approve
✅ 能夠使用 Quarkus Test 撰寫 API 測試
✅ 能夠模擬 Pub/Sub 事件測試
✅ 能夠測試 Datastore CRUD 操作
🔹 目標:學習 Kubernetes 部署,讓 API 能夠在 GKE 上運行
🔹 專案關聯:📂 message-gateway → Chart.yaml、values.yaml
🛠 Lab
1️⃣ 設計 values.yaml,設定環境變數
2️⃣ 建立 Helm Chart,定義 Deployment
3️⃣ 佈署 Quarkus API 到 GKE,並透過 Ingress 提供服務
🎯 Skill Approve
✅ 熟悉 Helm Chart 配置
✅ 能夠設定 values.yaml
✅ 能夠將 Quarkus API 佈署到 GKE
🔹 目標:將所有技術整合,佈署完整 message-gateway API
🔹 專案關聯:📂 message-gateway、message-management、message-sender-fcm
🛠 Lab
1️⃣ 撰寫完整的 message-gateway API
2️⃣ 撰寫 Apache Camel Route,發送訊息到 Pub/Sub
3️⃣ 撰寫 Quarkus 測試,確保 CRUD 操作正常
4️⃣ 佈署 message-gateway 到 GKE
🎯 Skill Approve
✅ 能夠整合 Quarkus、Pub/Sub、Datastore
✅ 能夠測試並佈署完整 API
✅ 能夠 Debug 並處理錯誤
目標: 於一個月內可以完全接手推播雲專案