Try   HackMD

教育訓練-專案程式上手

專案涵蓋 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基礎介紹?
  • 是否為全英授課?
  • 使用那些線上工具?
  • 如何進行考試測驗?
  • 用什麼方式進行授課? (越南實際出差/線上)