首页 > 其他分享 >高并发!一个仿 12306 铁路购票项目!

高并发!一个仿 12306 铁路购票项目!

时间:2024-12-09 09:21:35浏览次数:7  
标签:服务 service 项目 -- 购票 并发 12306

大家好,我是 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/#/

大家的点赞、收藏和评论都是对作者的支持,如文章对你有帮助还请点赞转发支持下,谢谢!


标签:服务,service,项目,--,购票,并发,12306
From: https://www.cnblogs.com/codechen8848/p/18592450

相关文章

  • 第一章:并发编程简介
    第一章:并发编程简介......
  • C# 现代并发编程最佳实践
    C#现代并发编程最佳实践欢迎阅读C#现代并发编程入门!本系列博客文章涵盖了C#中的并发编程基础、异步编程模型、并行编程,以及相关的高级主题如数据流、响应式编程、async/await原理解析、上下文管理等。以下是各章节的导航:目录第一章:并发编程简介概述并发编程的演变、C......
  • 生产者-消费者模式:多线程并发协作的经典案例
    生产者-消费者模式是多线程并发编程中一个非常经典的模式,它通过解耦生产者和消费者的关系,使得两者可以独立工作,从而提高系统的并发性和可扩展性。本文将详细介绍生产者-消费者模式的概念、实现方式以及应用场景。1生产者-消费者模式概述生产者-消费者模式包含两类线程:生......
  • 记一次线上高并发环境 TCP 握手丢包的故障处理
    背景业务场景需要有客户端通过tcp连接线上环境emqx集群环境,集群规模有5台node节点承载emqx业务,每台节点在业务端口上都有15w左右的tcp连接保持。近期发现与emqx相关的业务功能会出现间歇性的连接等待状态,索性运维同学在内网环境进行网络层的连接测试,确实复现了连接间......
  • 【并发编程】第三章 在线程之间共享数据
    3.1线程间共享数据的问题如果所有共享数据都是只读的,则不会有问题,因为一个线程读取的数据不受另一个线程的影响不变量(invariants):在程序或数据结构的特定状态下始终为真的属性或条件无论代码如何执行,这个不变量都应该始终保持成立。如果不成立,那就可能出现了错误考虑一个......
  • .NET线程池技术详解与优化策略:提升高并发应用性能的关键
    在现代应用程序中,线程池是管理和调度线程的一种重要技术。它通过提供一个可重用的线程集合,避免了频繁创建和销毁线程的开销,从而提升了系统的性能和响应能力。.NET平台的线程池是一个高度优化的资源管理机制,它支持高并发应用的开发,尤其是在Web应用和服务中,广泛用于后台任务处理......
  • 【项目设计】->高并发内存池(谷歌开源项目简化版)
    目录​编辑项目介绍内存池池化技术内存池malloc定长内存池的实现定长内存池模拟实现:高并发内存池框架设计高并发内存池的三小只threadcache(主线1开始)设计思路threadcache哈希桶映射对齐规则对齐映射函数的编写ThreadCache类编写 threadcache无锁访问(不熟)c......
  • 并发编程系列---【数组切割并行查询-解决sql的in超过1000的问题】
    1.问题List<List<Object>>splitList=CollUtil.split(dataList,800);List<User>resultList=newArrayList<>();//使用parallelStream输出切割后的结果,每个子列表的大小splitList.parallelStream().forEach(sublist->{List<User>users=userMa......
  • 第 6 章 Java 并发包中锁原理剖析Part one
    目录6.1LockSupport工具类 6.2独占锁ReentrantLock的原理 获取锁 1.voidlock()方法2.voidlockInterruptibly()方法3.booleantryLock()方法4.booleantryLock(longtimeout,TimeUnitunit)方法释放锁6.1LockSupport工具类 LockSupport它的主......
  • golang并发编程模型之actor(一)
    前言多线程/进程编程是每个程序员的基本功,同时也是开发中的难点,处理各种“锁”的问题是让人十分头痛的一件事。Actor模型,在1973由CarlHewitt定义,被ErlangOTP推广,其消息传递更加符合面向对象的原始意图。Actor模型属于并发组件模型,通过组件方式定义并发编程范式的高级阶......