# 教育訓練-專案程式上手 專案涵蓋 Quarkus API、GCP Datastore、Pub/Sub、Apache Camel、測試、Kubernetes 佈署 相關技術,據此規劃 Lab 和 Skill Approve。 > 目標 : 讓學員熟悉 Quarkus API、GCP Datastore、Pub/Sub、Apache Camel、測試、Kubernetes 部署 # POC 課程規劃(0 到 1) 本 POC 旨在讓越南 IT 新進人員快速上手 GCP 及 Quarkus,並能夠開發、測試、部署一個完整的雲端應用。考量到部分學員可能基礎較弱,課程將從 零開始(0 到 1),循序漸進,確保每位學員都能夠理解與應用。 目標 1. 掌握 Quarkus 基礎:學習如何開發 REST API,理解 Java 基礎概念。 2. 理解容器技術:學習 Docker,掌握容器化應用的概念與實作。 3. 學習 GCP 基礎服務:使用 Pub/Sub 進行訊息傳遞,透過 Datastore 儲存數據。 4. 部署應用到 GKE:學習如何將 Quarkus 應用容器化並部署至 Google Kubernetes Engine (GKE)。 5. 建立 CI/CD 流程:確保應用能夠透過 GitHub Actions 或 GitLab CI/CD 進行自動化部署。(選做) 6. 撰寫技術文件:確保後續新進人員能快速上手開發與維護。 ## POC 案例概述 開發一個 雲端推播系統。此系統將會處理來自不同系統的推播訊息,並透過 Pub/Sub 傳遞,最終存入 Datastore,供後續查詢與分析。 - 開發一個 Quarkus API 服務,讓外部系統可以透過 REST API 傳遞訊息。 - 設計 Pub/Sub 機制,確保訊息能夠被正確發送與接收。 - 儲存推播訊息到 Datastore,並提供 API 查詢歷史紀錄。 - 使用 GKE 部署整個應用,確保高可用性與可擴展性。 --- # Part1:Quarkus框架上手(15 天) ## 📅 Day 1-3:Quarkus 與 Reactive Programming 基礎 🔹 目標:理解 Quarkus 核心概念與響應式設計 🛠 Lab 1️⃣ 同步 vs 非同步 vs 響應式 • 阻塞 / 非阻塞 I/O • 使用 CompletableFuture / Mutiny 進行非同步處理 2️⃣ Quarkus 環境搭建 • 建立第一個 Quarkus REST API • Quarkus Dev Mode 開發體驗 🎯 Skill Approve ✅ 理解阻塞、非阻塞差異 ✅ 理解同步、非同步、響應式的差異 ✅ 使用 Quarkus 建立 REST API ## 📅 Day 4-6:Quarkus 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 文件 ## 📅 Day 7-8:Quarkus CDI 與設定管理 🔹 目標:掌握 Quarkus 的依賴注入與環境配置 🛠 Lab 1️⃣ Quarkus CDI • 介紹 Quarkus 的 DI(Contexts and Dependency Injection) • 使用 @Inject 與 @ApplicationScoped 管理依賴 2️⃣ Config Profiles • application.yaml 與環境變數管理 • @ConfigProperty 動態配置應用程式 🎯 Skill Approve ✅ 能夠使用 Quarkus CDI 進行依賴管理 ✅ 能夠根據環境變數動態配置應用程式 ## 📅 Day 9-10:Quarkus Reactive API 🔹 目標:使用 Mutiny 開發非同步 API 🛠 Lab 1️⃣ Mutiny 基礎 • 介紹 Uni 與 Multi • 轉換同步 API 為非同步 API 2️⃣ 非同步 API 開發 • 使用 Mutiny 進行非同步訊息處理 • 錯誤處理與重試機制 🎯 Skill Approve ✅ 理解 Uni / Multi 的概念 ✅ 能夠開發 Quarkus 響應式 API ## 📅 Day 11:Quarkus 進階開發 - 擴展性與模組化 🔹 目標:了解 Quarkus 擴展機制,學習如何模組化應用並管理依賴 🛠 Lab 1️⃣ 使用 Quarkus Extensions 擴展應用功能(如 Quarkus Scheduler、Cache) 2️⃣ 建立 Quarkus 模組化應用,拆分不同業務邏輯到獨立模組 3️⃣ 使用 @RegisterForReflection 了解 GraalVM 對反射的處理 🎯 Skill Approve ✅ 能夠使用 Quarkus Extensions 擴展應用 ✅ 能夠拆分 Quarkus 應用為不同模組,提高可維護性 ✅ 了解 Quarkus 在 GraalVM 環境下的反射管理 ## 📅 Day 12:Quarkus 進階開發 - 非同步處理與併發 🔹 目標:學習 Quarkus 如何處理非同步邏輯,並運用 Mutiny 強化併發能力 🛠 Lab 1️⃣ 使用 @Blocking 和 @NonBlocking 控制執行緒模型 2️⃣ 使用 Mutiny 進行非同步計算與串聯 3️⃣ 利用 Quarkus Scheduler 建立排程任務 🎯 Skill Approve ✅ 了解 Quarkus 內建的非同步與阻塞控制 ✅ 能夠使用 Mutiny 建立非同步與併發邏輯 ✅ 能夠設定 Quarkus Scheduler 來處理定時任務 ## 📅 Day 13:Quarkus 進階開發 - 安全性與認證 🔹 目標:學習 Quarkus 身份驗證與授權機制,使用 JWT 保護 API 🛠 Lab 1️⃣ 使用 Quarkus Security 擴展(如 quarkus-oidc)進行身份驗證 2️⃣ 建立 JWT-based API 安全機制,限制不同角色存取 3️⃣ 使用 @RolesAllowed、@PermitAll 等方式進行權限控管 🎯 Skill Approve ✅ 能夠使用 Quarkus Security 擴展進行身份驗證 ✅ 了解 JWT 在 Quarkus API 安全性中的應用 ✅ 能夠設定 API 權限控管 ## 📅 Day 14-15:Part 2 相關工具概念 🔹 目標:了解 Part 2 會用到的 GCP 服務,學習如何將 Quarkus 應用與這些工具整合 🛠 Lab 1️⃣ Pub/Sub 概念(事件驅動架構、訊息保證、Quarkus 整合) 2️⃣ Datastore 概念(NoSQL vs SQL、如何存取、常見模式) 🎯 Skill Approve ✅ 了解 Quarkus 如何與 Pub/Sub 進行事件驅動開發 ✅ 了解 Datastore 的基本存取模式與適用場景 # Part 2:專案框架上手(15 天) ## 📅 Day 1-2:Quarkus API 開發 🔹 目標:建立 Quarkus API,提供 RESTful 服務,處理訊息發送到 Pub/Sub 🔹 專案關聯:📂 message-gateway → EventStoreClient.java、ManagementClient.java 🛠 Lab 1️⃣ 建立 Quarkus API,實作 POST /messages - 解析 MessageDto,將其轉換為 MessageEventDto - 呼叫 EventStoreClient 存入訊息 2️⃣ 整合 Pub/Sub,使用 GCPPubSubMessageRouteBuilder 發送訊息 3️⃣ 實作異常處理,使用 GatewayResponseExceptionMapper 處理錯誤回應 🎯 Skill Approve ✅ 能夠使用 Quarkus 建立 RESTful API ✅ 能夠解析 DTO 並轉換為 Pub/Sub 訊息 ✅ 能夠處理異常並返回適當的錯誤資訊 ## 📅 Day 3-4:GCP Datastore CRUD 🔹 目標:熟悉 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 例外錯誤 ## 📅 Day 5-7:Apache Camel Route 🔹 目標:學習 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 操作 ## 📅 Day 10-12:Kubernetes 佈署 (待整理) 🔹 目標:學習 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 ## 📅 Day 13-15:綜合專案 🔹 目標:將所有技術整合,佈署完整 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 並處理錯誤 # 建議修改方向 ## 1. 課程天數: 總計20天(工作日) > 目標: 於一個月內可以完全接手推播雲專案 ### 第一周-前5天 - 半天(0.5天): 專案Overview - 其他(4.5天): GCP Cloud相關 - Pub/Sub - GKE - 網路權限設定 ## 2. 課程TA: - 剛畢業大學生 - 2年工作經驗工程師 ## 3. 待討論議題 - 完全不懂技術之人員是否需新增API & Restful基礎介紹? - 是否為全英授課? - 使用那些線上工具? - 如何進行考試測驗? - 用什麼方式進行授課? (越南實際出差/線上)