iT邦幫忙

鐵人檔案

2025 iThome 鐵人賽
回列表
Software Development

事件驅動電力交易平台:Spring Boot 實戰 系列

本系列將以打造一個模擬「電力交易所」的後端系統為主題,完整呈現如何利用 Spring Boot 建構事件驅動的微服務架構。平台核心功能包含掛單 API、資產鎖定、撮合引擎與結算流程,並透過 RabbitMQ 進行服務間的事件傳遞,Redis 作為撮合訂單簿,確保高併發下的效率與一致性。系列文章將依序介紹 API 設計、事件契約測試、訂單狀態追蹤、撮合邏輯以及多節點一致性等議題,並加入 eap-mcp 模組讓 LLM 進行市場模擬,展現如何結合新技術進行實務驗證。透過此專案,不僅能掌握 Spring Boot 與相關生態系的整合,也能體驗高併發系統設計的挑戰與解法。

參賽天數 22 天 | 共 22 篇文章 | 2 人訂閱 訂閱系列文 RSS系列文
DAY 11

Day 11|查得見的進度:Order Service 的訂單狀態追蹤

前面幾篇把「建立 → 核定 →(待)撮合」串起來了,但用戶會需要知道:我這張單現在到哪了?目前我用 in-memory Map 做最簡單的讀模型:PENDING...

2025-09-23 ‧ 由 yitintsai 分享
DAY 12

Day 12|撮合事件流全覽:從核定回報 → 撮合 → 成交回寫

1. 為什麼要先看全貌 在整理撮合細節之前,我先把「事件怎麼流動、各服務扮演什麼角色」說清楚。後續介紹任何一段程式碼時,都知道它站在整條鏈上的哪個位置。 2....

2025-09-24 ‧ 由 yitintsai 分享
DAY 13

Day 13|訂單簿模型:Redis 上的 Buy/Sell、訂單詳情、使用者索引

1. 設計目標 撮合效能來自「讀最優價與寫回」的快與穩。我用 Redis 建立簡單、直覺的三層模型:價位集合、訂單詳情、用戶id索引。這個設計支援高速的搓合以及...

2025-09-25 ‧ 由 yitintsai 分享
DAY 14

Day 14|訂單媒合Lua 原子操作:對手方最優價 → 取單 → 移除(一次完成

1. 為什麼一定要 Lua 撮合的臨界區在於「從對手方拿出一筆最優訂單並移除」。若用兩步(先查再刪),在多pod或多執行緒情況下就會出現交易問題。我改用一支 L...

2025-09-26 ‧ 由 yitintsai 分享
DAY 15

Day 15|部分/全部成交與撤單:回簿、移除與 REST 控制

1. 部分 vs. 全部成交:狀態怎麼走 在主回圈內,我已 Math.min() 比較這次交易的買單跟賣單後後算出本次成交量,然後同步更新兩者的剩餘量。 對手...

2025-09-27 ‧ 由 yitintsai 分享
DAY 16

Day 16|多節點不搶單:Queue 分工 × Lua 原子更新的雙保險

1. 多節點風險在哪 當我把撮合引擎部屬到k8s上,水平擴張成多個節點時,最怕的是「同一張對手單被不同節點同時吃走」。這會導致重複成交或扣到負數。為了避免這種搶...

2025-09-28 ‧ 由 yitintsai 分享
DAY 17

Day 17|WebSocket/STOMP 架構與設定:讓行情用「訂閱」取代輪詢

本文聚焦「架構與 WebSocket 設定」,說明為什麼用 STOMP/WebSocket、端點與前綴怎麼切、首次訂閱如何回推一次快照。次日會介紹「實際推送內容...

2025-09-29 ‧ 由 yitintsai 分享
DAY 18

Day 18 |推送面向與主題一覽 市場摘要、 訂單簿近況、 逐筆成交、 最近成交

本文聚焦「推送內容」本身:資料從哪來、怎麼整理、推到哪個 topic、payload 長什麼樣。 推送面向與主題一覽 市場摘要:/topic/market(...

2025-09-30 ‧ 由 yitintsai 分享
DAY 19

Day 19 | 在 order-service 增加 McpApiController:把「給機器用」與「給人用」的入口拆開

先前的文章,我把「給人類使用」的 API(下單、查詢、WebSocket 市場資訊…)都交代完了。從今天起切入 MCP(Model Context Protoc...

2025-10-01 ‧ 由 yitintsai 分享
DAY 20

Day 20 | 我的MCP服務 基礎設定與相關依賴使用

本文說明如何為 eap-mcp 模組準備 Gradle 依賴與常見設定,讓 MCP 工具可以順利編譯、注入以及與其他服務(如 wallet/order)整合。...

2025-10-02 ‧ 由 yitintsai 分享