高并发!一个仿 12306 铁路购票项目!
大家好,我是 Java陈序员
。
现在出行,乘坐高铁可以说是十分方便。12306 作为一款全国通用的铁路购票系统,承受着这个世界上任何秒杀系统都无法超越的 QPS, 上百万的并发再正常不过了!
今天,给大家介绍一个分布式、高可用的 12306 铁路购票开源项目。
关注微信公众号:【Java陈序员】,获取开源项目分享、AI副业分享、超200本经典计算机电子书籍等。
项目介绍
12306
—— 一个基于 JDK17
和 SpringBoot3
实现的铁路购票系统,包括会员、购票、订单、支付和网关等服务。
项目旨在让学习者可以快速掌握分布式系统设计的技巧,项目中包含了缓存、消息队列、分库分表、设计模式等代码,通过这些代码可以全面了解分布式系统的核心知识点。
系统提供了两种版本:
- 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/#/
大家的点赞、收藏和评论都是对作者的支持,如文章对你有帮助还请点赞转发支持下,谢谢!