本系列將以打造一個模擬「電力交易所」的後端系統為主題,完整呈現如何利用 Spring Boot 建構事件驅動的微服務架構。平台核心功能包含掛單 API、資產鎖定、撮合引擎與結算流程,並透過 RabbitMQ 進行服務間的事件傳遞,Redis 作為撮合訂單簿,確保高併發下的效率與一致性。系列文章將依序介紹 API 設計、事件契約測試、訂單狀態追蹤、撮合邏輯以及多節點一致性等議題,並加入 eap-mcp 模組讓 LLM 進行市場模擬,展現如何結合新技術進行實務驗證。透過此專案,不僅能掌握 Spring Boot 與相關生態系的整合,也能體驗高併發系統設計的挑戰與解法。
前面幾篇把「建立 → 核定 →(待)撮合」串起來了,但用戶會需要知道:我這張單現在到哪了?目前我用 in-memory Map 做最簡單的讀模型:PENDING...
1. 為什麼要先看全貌 在整理撮合細節之前,我先把「事件怎麼流動、各服務扮演什麼角色」說清楚。後續介紹任何一段程式碼時,都知道它站在整條鏈上的哪個位置。 2....
1. 設計目標 撮合效能來自「讀最優價與寫回」的快與穩。我用 Redis 建立簡單、直覺的三層模型:價位集合、訂單詳情、用戶id索引。這個設計支援高速的搓合以及...
1. 為什麼一定要 Lua 撮合的臨界區在於「從對手方拿出一筆最優訂單並移除」。若用兩步(先查再刪),在多pod或多執行緒情況下就會出現交易問題。我改用一支 L...
1. 部分 vs. 全部成交:狀態怎麼走 在主回圈內,我已 Math.min() 比較這次交易的買單跟賣單後後算出本次成交量,然後同步更新兩者的剩餘量。 對手...
1. 多節點風險在哪 當我把撮合引擎部屬到k8s上,水平擴張成多個節點時,最怕的是「同一張對手單被不同節點同時吃走」。這會導致重複成交或扣到負數。為了避免這種搶...
本文聚焦「架構與 WebSocket 設定」,說明為什麼用 STOMP/WebSocket、端點與前綴怎麼切、首次訂閱如何回推一次快照。次日會介紹「實際推送內容...
本文聚焦「推送內容」本身:資料從哪來、怎麼整理、推到哪個 topic、payload 長什麼樣。 推送面向與主題一覽 市場摘要:/topic/market(...
先前的文章,我把「給人類使用」的 API(下單、查詢、WebSocket 市場資訊…)都交代完了。從今天起切入 MCP(Model Context Protoc...
本文說明如何為 eap-mcp 模組準備 Gradle 依賴與常見設定,讓 MCP 工具可以順利編譯、注入以及與其他服務(如 wallet/order)整合。...