从零开始手搓12306项目
山以
这个作者很懒,什么都没留下…
展开
-
【从零开始手搓12306项目】二十八、雪花算法(一阶段结束)
在common中新建一个util包,新建ShowUtil类,封装雪花算法。为每个数据中心和机器编号,保证每台机器生成的ID不重复。在高并发场景中,雪花算法是解决ID冲突的不错选择。修改memberservice。将代码提交到git仓库。原创 2024-04-18 09:49:51 · 181 阅读 · 0 评论 -
【从零开始手搓12306项目】二十七、集成校验框架
LOG.error("业务异常:{}", e.getBindingResult().getAllErrors().get(0).getDefaultMessage());在MemberRegisterReg类中添加注解。MemberController中添加注解。在common模块的pom文件中添加依赖。* 校验异常统一处理。将代码提交到git仓库。原创 2024-04-18 09:49:47 · 179 阅读 · 0 评论 -
【从零开始手搓12306项目】二十六、使用自定义异常处理异常业务
在common模块新建exception包,新建BusinessExceptionEnum类。为了区分业务异常和系统异常,需要增加自定义异常类。生成get/set和tostring方法。新增BusinessRxceptin类。集成RuntimeExceptin。修改memberservice代码。生成get/set和构造函数。将代码提交到git仓库。原创 2024-04-18 09:49:24 · 161 阅读 · 0 评论 -
【从零开始手搓12306项目】二十五、增加统一异常处理
在common模块中新增controller包,新增ControllerException类。将代码提交到git仓库。原创 2024-04-17 10:56:32 · 207 阅读 · 0 评论 -
【从零开始手搓12306项目】二十四、封装请求参数和返回结果
member模块中ing新建req包,新建MemberRegisterReq类。在common模块中新建resp包,新建CommonResp类。写一个属性,并生成get/set和tostring方法。因为增加了无参构造,所以可以优化注册功能代码。将代码提交到git仓库。原创 2024-04-17 10:55:13 · 201 阅读 · 0 评论 -
【从零开始手搓12306项目】二十三、完成会员注册接口的开发
先写service,再写controller。在http文件中输入ptrp回车快速创建代码。将代码提交到git仓库。原创 2024-04-17 10:52:51 · 140 阅读 · 0 评论 -
【从零开始手搓12306项目】二十二、集成Mybatis官方生成器
自定义的SQL需要写到自己的mapper里,不能放在生成的mapper里。Mybatis官方代码生成器:Mybatis Generator。开发规范:生成器生成的四个文件都不能手动修改。创建新模块generator。在resources新建文件。修改service方法。将代码提交到git仓库。原创 2024-04-17 10:51:01 · 176 阅读 · 0 评论 -
【从零开始手搓12306项目】二十一、集成Mybatis持久层框架
在common的数据配置文件中的数据库连接配置剪切到member模块中,添加mybatis.xml路径。新增service包,创建MemberService类,添加注解@Service,创建执行方法。在common模块的application.properties文件中,添加数据库连接。新建MemberMapper.xml文件,在启动类中添加注解@MapperScan。在member模块下的main中新建包mapper,用来存放持久层框架。每个模块的数据库配置不一样,所以放在各自的模块里。原创 2024-04-17 10:46:28 · 311 阅读 · 0 评论 -
【从零开始手搓12306项目】二十、使用IDEA配置数据库连接
输入连接名称,账号、密码和数据库名,此时下面会有URL,在数据库配置中会经常用到。安装mysql8.0,并配置好环境变量,用户名和密码,新建数据库train。在Database的Data Source下选择mysql。在项目中新建文件夹sql,新建member.sql文件。输入sql语句并运行,此时在数据库中会新增一个表。将代码提交到git仓库。原创 2024-04-17 10:41:53 · 207 阅读 · 0 评论 -
【从零开始手搓12306项目】十九、增加网关模块
只有gateway需要配置外网IP,其它模块都只开放内网访问,外网访问不了,保证应用安全。gateway只有一个依赖,不能引入common,也不能引入starter-web。在main下新建包com.jia.train.gateway.config。新增application.properties文件,端口配置为8000。修改valu值,让输出的日志文件都保存在gateway文件下。在train项目中增加一个maven模块gateway。做路由转发,转发到member模块。打印请求日志,修改参数。原创 2024-04-17 10:39:36 · 139 阅读 · 0 评论 -
【从零开始手搓12306项目】十八、增加通用模块
将member模块下的pom文件依赖复制到common模块下,将devtools和test依赖删除。在父pom文件和member中添加common依赖,在member中不需要依赖的版本号。在common模块的main下面新建一个aspect包。在train项目中增加一个maven模块common。去掉member里面的aspect包。相反,在member中只保留这两个。新建一个LogAspect类。原创 2024-04-17 10:37:05 · 186 阅读 · 0 评论 -
【从零开始手搓12306项目】十七、增加AOP打印请求参数和返回结果
注意在子模块中的pom文件中添加依赖时,不需要版本号,版本号只需要写在根目录下。在member模块的main下面新建一个aspect包。注意:添加依赖后,需要收到刷新maven导入jar包。同时在member模块的pom文件中导入AOP依赖。同时将依赖添加到member目录下的pom文件中。在根目录下的pom文件中加入第三方依赖。新建一个LogAspect类。AOP可以拦截其它类。原创 2024-04-17 10:35:23 · 201 阅读 · 0 评论 -
【从零开始手搓12306项目】十六、使用HHTPClient完成测试接口
在里面新建一个文件,member-test.http。左边绿色三角运行,可以让项目在idea中测试运行。在train项目中新建一个包,命名为http。在里面输入gtr回车快速生成所需代码。原创 2024-04-17 10:10:35 · 185 阅读 · 0 评论 -
【从零开始手搓1230项目】十五、实现日志的相关配置
在resources包下添加logback-spring.xml文件,是日志文件格式配置文件,修改valu值,让输出的日志文件都保存在member文件下。在项目提交到git时,一般不会将日志文件上传到远程仓库,所以在.gitignore文件中将log文件屏蔽掉。为了后续做路由转发,在网关模块里,将接口带“/member”的请求兜转发到member模块。将代码加在application.properties里面。在启动类里面加代码,要修改类名。之后就可以将项目提交到git上。原创 2024-04-17 10:08:59 · 154 阅读 · 0 评论 -
【从零开始手搓12306项目】十四、新建member模块
在resources包下新建application.properties,可以在这个文件里面定义访问端口和数据库相关信息等。将文件提交给git管理,在main下新建包com.jia.train.member.config。将父pom文件下的dependencies和build标签内容剪切到member的pom文件中。新建MemberApplication启动类。这样可以读取到其他包的Controller。新建maven模块,命名为member。新建TestController。新建controller包。原创 2024-04-17 10:05:26 · 180 阅读 · 0 评论 -
【从零开始手搓12306项目】十三、代码关联远程Git仓库
实际工作中,每完成一个小功能,就提交一次,写清楚注释,下班前,代码全部push到远程仓库,前提是代码不要报错。创建成功之后仓库会有提示操作,在本地仓库克隆到远程仓库代码块找相关代码。打开命令行窗口,输入以下代码,将名字和邮箱更改成自己的。将勾选取消,这两个的目的是每次提交都检查代码正确性。关联远程Git仓库需要SSH密钥。在本店的Git目录下可以生成密钥。点击Show SSH Key。将SSH密钥添加到自己仓库中。将本地仓库与远程仓库关联起来。授权仓库绑定,输入yes。将项目交给Git管理。原创 2024-04-17 10:00:45 · 163 阅读 · 0 评论 -
【从零开始手搓12306项目】十二、项目初始化配置
idea的编码环境全都改成UTF-8。原创 2024-04-17 09:35:29 · 225 阅读 · 0 评论 -
【从零开始手搓12306项目】十一、快速完成微服务架构的搭建
创建Application启动类,测试项目能不能正常启动。导入热部署、Web框架和Cloud Bootstrap。创建Spring Initializr。SDK版本选择选择JDK 17。idea配置好Maven环境。原创 2024-04-17 09:32:58 · 177 阅读 · 0 评论 -
【从零开始手搓12306项目】第一阶段遇到的问题及解决方案
此时本地仓库的代码版本与云仓库代码版本冲突,打开命令行强制推送,让本地仓库覆盖云仓库。一定要注意数据库的url链接,在datebase的url复制过来。定义Git全局的 .gitignore 文件。注意区分private和public。最好复制一遍到xml文件。原创 2024-04-16 19:43:13 · 262 阅读 · 0 评论 -
【从零开始手搓12306项目】十、百万人抢一万张票,系统如何保证其正常及稳定性?
针对静态资源做CDN(Content Delivery Network 内容分发网络)微服务-服务拆分(一般是按功能模块来划分,热点接口也可以做成单独的服务)缓存(本地缓存、分布式缓存),穿透、击穿、雪崩等问题。分表:横向分表(一般按时间或地区划分)、纵向分表。冗余设计,反范式,空间换时间。分库:业务分离、读写分离。倒计时&Loading。原创 2024-04-16 19:40:06 · 240 阅读 · 0 评论 -
【从零开始手搓12306项目】九、12306系统数据库表
原创 2024-04-16 19:38:40 · 83 阅读 · 0 评论 -
【从零开始手搓12306项目】八、12306系统整体架构设计
6.1 简单的模块划分6.2 加入common模块,放置公共代码;制作generator代码生成器模块6.3 加入中间件及微服务组件原创 2024-04-16 19:36:56 · 177 阅读 · 0 评论 -
【从零开始手搓12306项目】七、12306系统功能模块划分
会员模块:会员、乘客、已购买的车票。业务模块:所有的车次数据、余票信息。跑批模块:管理定时任务,界面启停。admin模块:管理员相关界面。网管模块:路由转发、登录校验。web模块:会员相关界面。热点接口会做成单独的模块。不同的模块配置不同的资源。原创 2024-04-16 19:34:56 · 155 阅读 · 0 评论 -
【从零开始手搓12306项目】六、12306系统核心功能
原创 2024-04-16 19:33:29 · 133 阅读 · 0 评论 -
【从零开始手搓12306项目】五、如何保证不超卖、不少卖、还能承受极高的并发?
座位购买:记录座位销售详情(将卖票变成01二进制数的计算)余票查询:记录站站余票。原创 2024-04-16 19:32:04 · 128 阅读 · 0 评论 -
【从零开始手搓12306项目】四、12306是如何成为全球最忙碌的网站之一?
一天的请求量大概1600亿,平均180万/秒(二八理论:20%的事件产生80%的请求),不适合二八理论,因为12306分时间放票。提高处理能力:QPS和TPS(堆积硬件、软件:Gemfine、算法:模型、逻辑)削峰(削峰填谷)[业务:验证码、分时段、排队]、[技术:限流、异步]平均一年售出30亿张,高峰期日售票能力达到了2000万张。高峰期1秒可卖出1300张票。原创 2024-04-16 19:30:56 · 179 阅读 · 0 评论 -
【从零开始手搓12306项目】三、众多高并发项目中,为什么选择12306
业务复杂度高于淘宝双11,考验个人程序设计能力(动态库存、选座功能、线上线下并行)持续高并发业务,需要更综合的高并发设计(不停地刷票、绝不能超卖)商品秒杀,淘宝双11。原创 2024-04-16 19:29:52 · 292 阅读 · 0 评论 -
【从零开始手搓12306项目】二、为什么要选择SpringBoot3和JDK17
课程中的高并发技术(CDN、分布式缓存[缓存穿透、缓存击穿、缓存雪崩]、两层验证码[特事特办:纯前端验证码+后端验证码]、限流技术、令牌技术、分布式锁、异步削峰、排队机制、分布式事务),和版本无关,适合普遍的SpringBoot2+JDk1.8项目。JAVA开发非常依赖Spring(SpringBoot3重要特性:AOT)Spingboot 3.0.0(至少要升级到JDK 17)学习要激进(学新版),项目要滞后(用旧版)SpringBoot3要求最低JDK17。第三方依赖如Mybatis,都做了升级。原创 2024-04-16 19:27:37 · 159 阅读 · 0 评论 -
【从零开始手搓12306项目】一、项目指南
学习主流前后端分离架构,Spring Cloud Alibaba + Vue3。秒杀过程没有问题,但是服务器响应很慢(异步削峰+排队机制)高并发技术:缓存、分布式锁、限流、令牌、削峰、排队等。秒杀还没开始,页面就崩了(页面静态化、CDN)全面学习高性能、高并发、高可用场景解决方案。秒杀还没开始,服务器就崩了(限流、令牌)主流前后端分离架构+高并发技术项目实战。秒杀结束后,库存崩了(分布式锁技术)缺少大型高并发项目开发经验的开发人员。引入高并发技术,实现高性能抢票。架构搭建,使用前后端分离架构。原创 2024-04-16 19:26:32 · 246 阅读 · 0 评论