高併發!一個仿 12306 鐵路購票專案!

Java陈序员發表於2024-12-09

大家好,我是 Java陳序員

現在出行,乘坐高鐵可以說是十分方便。12306 作為一款全國通用的鐵路購票系統,承受著這個世界上任何秒殺系統都無法超越的 QPS, 上百萬的併發再正常不過了!

今天,給大家介紹一個分散式、高可用的 12306 鐵路購票開源專案。

關注微信公眾號:【Java陳序員】,獲取開源專案分享、AI副業分享、超200本經典計算機電子書籍等。

專案介紹

12306 —— 一個基於 JDK17SpringBoot3 實現的鐵路購票系統,包括會員、購票、訂單、支付和閘道器等服務。

專案旨在讓學習者可以快速掌握分散式系統設計的技巧,專案中包含了快取、訊息佇列、分庫分表、設計模式等程式碼,透過這些程式碼可以全面瞭解分散式系統的核心知識點。

系統提供了兩種版本:

  • SpringBoot 聚合服務版本:適合測試和部署,直接啟動 aggregation-service 聚合服務和閘道器服務
  • SpringCloud 微服務版本:適合學習微服務設計,可以分別啟動支付、訂單、使用者、購票和閘道器服務

技術棧

  • Spring Boot
  • SpringCloud Alibaba
  • SpringCloud Gateway
  • MyBatis-Plus
  • Redisson
  • RocketMQ
  • ShardingSphere
  • Vue
  • Ant Design Vue

專案截圖

  • 車票查詢

  • 購買車票

  • 車票付款

  • 個人資訊

  • 乘車人

  • 訂單管理

快速開始

環境搭建

  • 環境依賴

    • JDK17+
    • SpringBoot3
    • MySQL5.7
    • Redis
    • RocketMQ
    • Nacos
    • Node.js
  • 程式碼下載

git clone https://github.com/nageoffer/12306.git
  • 程式碼目錄結構
.
├── console-vue     -- # 前端工程
├── dependencies    -- # 依賴管理
├── frameworks      -- # 後端核心框架
├── resources       -- # 資料庫資源
├── services        -- # 後端服務
└── tests           -- # 測試工程
  • 初始化資料庫

1、建立資料庫 12306

CREATE DATABASE `12306` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;

2、執行 /resources/db/12306-{springboot or springcloud}.sql 初始化資料庫

3、執行 /resources/data/12306-{springboot or springcloudxx}.sql 初始化資料

後端專案

1、將專案以 Maven 的形式匯入到 IDEA 中

2、後端服務目錄結構

services
├── aggregation-service  -- # 聚合服務
├── gateway-service      -- # 閘道器服務
├── order-service        -- # 訂單服務
├── pay-service          -- # 支付服務
├── ticket-service       -- # 購票服務
└── user-service         -- # 使用者服務

聚合服務將訂單、支付、使用者以及購票系統進行了聚合,啟動一個服務即可享受 12306 購票系統全部功能,減少本地啟動記憶體壓力以及伺服器部署壓力。

3、修改 services/aggregation-service/src/main/resources/application.yaml 配置檔案中的 Redis、Nacos、RocketMQ 的連線資訊

4、修改 services/aggregation-service/src/main/resources/shardingsphere-config-dev.yaml 配置檔案中的 MySQL 的連線資訊

5、執行 org.opengoofy.index12306.biz.aggregationservice.AggregationServiceApplication 主啟動類,啟動聚合服務

6、修改 services/gateway-service/src/main/resources/application.yaml 配置檔案中的 Nacos 的連線資訊

7、執行 org.opengoofy.index12306.biz.gatewayservice.GatewayServiceApplication 主啟動類,啟動閘道器服務

前端專案

1、進入前端工程專案

cd console-vue

2、安裝依賴

npm i

3、啟動服務

npm run serve

4、瀏覽器訪問

http://localhost:8080/

預設使用者名稱密碼:admin/admin123456

12306 這個開源專案與其他傳統“爛大街”的商城、外賣專案相比,業務更復雜、實現難度更大,更加具有學習意義。

如果你想更加系統地、深入地學習分散式系統,可以試試 12306 這個開源專案~

專案地址:https://github.com/nageoffer/12306

最後

推薦的開源專案已經收錄到 GitHub 專案,歡迎 Star

https://github.com/chenyl8848/great-open-source-project

或者訪問網站,進行線上瀏覽:

https://chencoding.top:8090/#/

大家的點贊、收藏和評論都是對作者的支援,如文章對你有幫助還請點贊轉發支援下,謝謝!


相關文章