12306项目:铁路购票系统 学习笔记 【上】

【如需文档+文末V免费获取!】

本文是我在做12306铁路购票项目的笔记。

总结出来吃透12306项目分4步走:1、把git上的代码拷下来,想尽一切办法运行;2、然后吃透项目中的核心业务,对项目有大致了解;3、把项目中运用的核心技术吃透,多打断点多跟踪代码;4、改动项目持续内化,产生一个新项目。

上述方法论对理解任何一个项目有效,本文仅对1、2步进行深入讲解。

壹、项目运行

一、克隆项目

克隆网址:https://gitee.com/nageoffer/12306

出现下面这个问题:

可以通过如下方式解决:

依赖下载成功:

二、安装中间件环境

这里是马哥提供的中间件服务器,免去中间件环境搭建的问题(如果需要Redis、RocketMQ以及 Nacos 域名可微信私信我)

-Dspring.data.redis.password=Sm9sVXBOYJjI030b5tz0trjpzvZzRhtZmEbv0uOImcD1wEDOPfeaqNU4PxHob/Wp
-Dspring.data.redis.port=19389
-Dunique-name=-自定义名称,可以切换为自己的名称
-Dframework.cache.redis.prefix=自定义名称,可以切换为自己的名称:
-Dspring.data.redis.host=Redis域名
-Drocketmq.name-server=RocketMQ域名
-Dspring.cloud.nacos.discovery.server-addr=Nacos域名

-Dspring.data.redis.password=Sm9sVXBOYJjI030b5tz0trjpzvZzRhtZmEbv0uOImcD1wEDOPfeaqNU4PxHob/Wp
-Dspring.data.redis.port=19389
-Dunique-name=-PBJ
-Dframework.cache.redis.prefix=PBJ:
-Dspring.data.redis.host=common-redis-dev.magestack.cn
-Drocketmq.name-server=common-rocketmq-dev.magestack.cn:9876
-Dspring.cloud.nacos.discovery.server-addr=common-nacos-dev.magestack.cn:8848

注意注意,一定要注意,要给下面每一个Application添加VM options这个参数,否则的话会因为缺少参数而无法启动。

基本启动成功:

中间件控制台:

Nacos: http://common-nacos-dev.magestack.cn:8848/nacos/index.html

用户名/密码:nacos/nacos

RocketMQ:RocketMq-console-ng

以分布式开启:

如果遇到下面Command line is too long的错误

可以修改下面这个地方:

三、初始数据库表

在项目中有自带数据库:

12306 铁路购票模式有两种启动模式,分别是聚合版 SpringBoot 模式以及 SpringCloud 微服务模式。

下面是SpringBoot聚合模式:

建立数据库12306:

下面是SpringCloud分布式模式:

建立下面4个数据库:

12306_ticket、12306_user_0、12306_pay_0、12306_order_0

按照上面的套路把12306_ticket、12306_user_0、12306_pay_0、12306_order_0 的数据库结构和数据全部导入。

确保这些表的数据都已全部导入?

四、运行后端

 第一次运行启动聚合服务和网关服务即可:

五、运行前端

下面是前端nginx的下载地址:

https://pan.baidu.com/s/1IGrr8xjtFc7c-UJSn-pBtg

提取码:zzyb

如需压缩包可付费找我获取。

访问localhost如果出现下面页面代表成功:

访问:http://localhost:5175 ,跳转到12306的页面:

如果想用本地前端的方式启动,需要先下载node.js,推荐16以上的版本:

Index of /download/release/v16.20.1/ (nodejs.org)

安装yarn:

npm install -g yarn

贰、核心业务熟悉

六、发起支付

七、车票搜索

八、列车数据检索

九、注册用户

十、乘车人模块

十一、敏感信息加密

十二、用户购票责任链验证

十三、座位分配图

十四、实现列车购票流程

十五、列车余票保障缓存数据一致性

十六、库存扣减令牌限流

十七、分库分表

十八、车票订单查看

一、核心业务和技术

1、判断用户名是否已被注册接口,如何应对海量并发请求带来的缓存穿透问题?

2、用户敏感数据存储到数据库后,如何避免被黑客将数据库攻破并窃取用户信息?

3、海量并发查询车票列表接口,如何应对海量请求的查询,以及众多条件如何满足?

4、海量并发下单接口,如何应对海量用户下单请求,如何进行限流以保证系统不崩溃?以及如何正确落库?

5、用户下单后如何保障列车座位余票缓存和数据库一致性?非常典型的数据库和缓存一致性问题。

6、用户下单十分钟未支付,如何取消用户未付款订单?如果用户已支付,如何避免错误取消?

7、系统中用了消息队列后,如何确保消息不会被重复消费,保证业务系统消费幂等性?

8、海量用户和订单数据如何存储,通过什么分库分表规则保障系统高性能响应用户查询等请求?

9、如何通过分库分表基因算法保障分片键的易用性?比如一个订单号字段同时支持订单号和用户 ID 查询。

.10、海量数据分库分表后,为什么选择雪花算法作为 ID?如何保障雪花算法在大规模集群下生成不重复?

【如需文档加下方微信私信】

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值