iT邦幫忙

鐵人檔案

2025 iThome 鐵人賽
回列表
Software Development

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

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

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

IThome 鐵人賽 Day 1|打造電力交易平台:系統設計與技術藍圖

這個系列將分享我在打造一個模擬「電力交易所(EAP: Electricity Auction Platform)」的後端系統時所選擇的技術與設計思維。靈感來自我...

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

Day 2|從 API 開始設計:OpenAPI 驅動式開發與契約生成實作

API 是模組溝通的基礎,因此我採用 API-first 的開發流程,也就是先設計好完整的 OpenAPI 文件,再透過工具生成程式碼與測試契約。這樣不僅讓不同...

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

Day 3|事件驅動實作:從 Order Service 發送 RabbitMQ 訂單事件

在這篇文章中,我將分享我如何在 order-service 中設定 RabbitMQ,並在使用者掛買單時,發送一筆 OrderCreateEvent 到指定的佇...

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

Day 4|事件驅動實作:Wallet Service 接收訂單事件並執行資產鎖定

在上一篇中,我介紹了如何在 Order Service 發送一筆 OrderCreateEvent 到 RabbitMQ。本篇要延續這條事件流,帶你看看我如何在...

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

Day 5|為什麼選擇事件驅動 Wallet 核定,而不是 API 呼叫?以及我如何追蹤訂單狀態

在交易系統裡,一筆訂單成立的關鍵步驟是 Wallet 的資產核定。這裡我選擇使用 事件驅動 的方式完成核定,而不是讓 Order Service 直接呼叫 Wa...

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

Day 6|事件契約測試:使用 Spring Cloud Contract 驗證 Wallet Service 發送事件

在前幾篇中,我實作了 CreateOrderListener,當收到 OrderCreateEvent 後會驗證錢包餘額、進行資產鎖定,最後發送一筆 Order...

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

Day 7|從 REST 到事件:Order Service 的請求 → 事件映射全流程

這一篇把前幾天的 API 契約與RabbitMQ Producer 串起來,完整走一遍:POST /bid/buy(REST) → 組事件 OrderCreat...

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

Day 8|AMQP 組態與命名:支撐現有事件流的最小集合

1. 現行組態(最小可行) • Exchange:order.exchange(Topic)• Queue:order.create.queue(接 order...

2025-09-20 ‧ 由 yitintsai 分享
DAY 9

Day 9|Wallet Consumer :資產驗證與鎖定的交易邏輯

Wallet 是這條事件流的「核定關」。本篇把 Listener 的行為逐段拆解,說清楚 BUY / SELL 的條件與凍結欄位。 1.Listener 的輸入...

2025-09-21 ‧ 由 yitintsai 分享
DAY 10

Day 10|把「核定完成」送去撮合:OrderCreatedEvent 的語意與落點

今天專講 OrderCreatedEvent 本人:它為什麼是「可撮合」的門票?怎麼保證它送得正確? 1.欄位與語意 在 Wallet 端用 builder 把...

2025-09-22 ‧ 由 yitintsai 分享