All Projects → techa03 → Goodskill

techa03 / Goodskill

Licence: mit
🐂基于springcloud +dubbo构建的模拟秒杀项目,模块化设计,集成了分库分表、elasticsearch🔍、gateway、mybatis-plus、spring-session等常用开源组件

Programming Languages

java
68154 projects - #9 most used programming language
kotlin
9241 projects

Projects that are alternatives of or similar to Goodskill

Springboot Templates
springboot和dubbo、netty的集成,redis mongodb的nosql模板, kafka rocketmq rabbit的MQ模板, solr solrcloud elasticsearch查询引擎
Stars: ✭ 100 (-87.28%)
Mutual labels:  dubbo, kafka, mybatis, redis, mongodb, elasticsearch, springboot, rabbitmq
Mall
mall项目是一套电商系统,包括前台商城系统及后台管理系统,基于SpringBoot+MyBatis实现,采用Docker容器化部署。 前台商城系统包含首页门户、商品推荐、商品搜索、商品展示、购物车、订单流程、会员中心、客户服务、帮助中心等模块。 后台管理系统包含商品管理、订单管理、会员管理、促销管理、运营管理、内容管理、统计报表、财务管理、权限管理、设置等模块。
Stars: ✭ 54,797 (+6871.63%)
Mutual labels:  mybatis, redis, mongodb, elasticsearch, springboot, springcloud, rabbitmq
Mall Swarm
mall-swarm是一套微服务商城系统,采用了 Spring Cloud Hoxton & Alibaba、Spring Boot 2.3、Oauth2、MyBatis、Docker、Elasticsearch、Kubernetes等核心技术,同时提供了基于Vue的管理后台方便快速搭建系统。mall-swarm在电商业务的基础集成了注册中心、配置中心、监控中心、网关等系统功能。文档齐全,附带全套Spring Cloud教程。
Stars: ✭ 7,874 (+901.78%)
Mutual labels:  mybatis, redis, mongodb, elasticsearch, springboot, springcloud, rabbitmq
Mall Learning
mall学习教程,架构、业务、技术要点全方位解析。mall项目(40k+star)是一套电商系统,使用现阶段主流技术实现。涵盖了SpringBoot 2.3.0、MyBatis 3.4.6、Elasticsearch 7.6.2、RabbitMQ 3.7.15、Redis 5.0、MongoDB 4.2.5、Mysql5.7等技术,采用Docker容器化部署。
Stars: ✭ 10,236 (+1202.29%)
Mutual labels:  mybatis, redis, mongodb, elasticsearch, springboot, springcloud, rabbitmq
Springbootexamples
Spring Boot 学习教程
Stars: ✭ 794 (+1.02%)
Mutual labels:  dubbo, kafka, mybatis, redis, mongodb, elasticsearch
Springboot Learning
基于Gradle构建,使用SpringBoot在各个场景的应用,包括集成消息中间件、前后端分离、数据库、缓存、分布式锁、分布式事务等
Stars: ✭ 340 (-56.74%)
Mutual labels:  dubbo, kafka, mybatis, redis, elasticsearch, rabbitmq
Superman
Superman是什么:构建Java 高级开发技术的知识体系,从基础不断打怪升级成为超人之路(更新中.......)
Stars: ✭ 106 (-86.51%)
Mutual labels:  dubbo, kafka, mybatis, redis, springboot, rabbitmq
Spring Samples For All
spring、spring-boot、spring-cloud 常用整合用例
Stars: ✭ 401 (-48.98%)
Mutual labels:  dubbo, kafka, mybatis, redis, mongodb, rabbitmq
Spring Boot Quick
🌿 基于springboot的快速学习示例,整合自己遇到的开源框架,如:rabbitmq(延迟队列)、Kafka、jpa、redies、oauth2、swagger、jsp、docker、spring-batch、异常处理、日志输出、多模块开发、多环境打包、缓存cache、爬虫、jwt、GraphQL、dubbo、zookeeper和Async等等📌
Stars: ✭ 1,819 (+131.42%)
Mutual labels:  dubbo, mybatis, redis, elasticsearch, springboot, rabbitmq
Supermarket
设计精良的网上商城系统,包括前端、后端、数据库、负载均衡、数据库缓存、分库分表、读写分离、全文检索、消息队列等,使用SpringCloud框架,基于Java开发。该项目可部署到服务器上,不断完善中……
Stars: ✭ 1,278 (+62.6%)
Mutual labels:  mybatis, redis, elasticsearch, springboot, springcloud, rabbitmq
Pdf
编程电子书,电子书,编程书籍,包括C,C#,Docker,Elasticsearch,Git,Hadoop,HeadFirst,Java,Javascript,jvm,Kafka,Linux,Maven,MongoDB,MyBatis,MySQL,Netty,Nginx,Python,RabbitMQ,Redis,Scala,Solr,Spark,Spring,SpringBoot,SpringCloud,TCPIP,Tomcat,Zookeeper,人工智能,大数据类,并发编程,数据库类,数据挖掘,新面试题,架构设计,算法系列,计算机类,设计模式,软件测试,重构优化,等更多分类
Stars: ✭ 12,009 (+1427.86%)
Mutual labels:  mybatis, redis, elasticsearch, springboot, springcloud, rabbitmq
Spring Boot Vue Bank
我,请始皇[打钱]是一个前后端分离的工具人系统,项目采用 SpringBoot+Go+Vue 开发,项目加入常见的企业级应用所涉及到的技术点,例如 Redis、RabbitMQ 等(主要是多用用工具多踩踩坑)。
Stars: ✭ 157 (-80.03%)
Mutual labels:  kafka, mybatis, redis, mongodb, springboot
Spring Boot Examples
about learning Spring Boot via examples. Spring Boot 教程、技术栈示例代码,快速简单上手教程。
Stars: ✭ 26,812 (+3311.2%)
Mutual labels:  mybatis, mongodb, springboot, springcloud, rabbitmq
Echo
🦄 开源社区系统:基于 SpringBoot + MyBatis + MySQL + Redis + Kafka + Elasticsearch + Spring Security + ... 并提供详细的开发文档和配套教程。包含帖子、评论、私信、系统通知、点赞、关注、搜索、用户设置、数据统计等模块。
Stars: ✭ 129 (-83.59%)
Mutual labels:  kafka, mybatis, redis, elasticsearch, springboot
Springboot
SpringBoot 整合各类框架和应用
Stars: ✭ 54 (-93.13%)
Mutual labels:  dubbo, kafka, redis, mongodb, springboot
Szt Bigdata
深圳地铁大数据客流分析系统🚇🚄🌟
Stars: ✭ 826 (+5.09%)
Mutual labels:  kafka, redis, mongodb, elasticsearch, springboot
Javaall
这是一个Java开发宝典,所有的Java技术都在这里,用心学习,努力提升!
Stars: ✭ 67 (-91.48%)
Mutual labels:  dubbo, mybatis, redis, springboot, springcloud
Cookbook
🎉🎉🎉JAVA高级架构师技术栈==任何技能通过 “刻意练习” 都可以达到融会贯通的境界,就像烹饪一样,这里有一份JAVA开发技术手册,只需要增加自己练习的次数。🏃🏃🏃
Stars: ✭ 428 (-45.55%)
Mutual labels:  kafka, mybatis, redis, elasticsearch, rabbitmq
Onemall
芋道 mall 商城,基于微服务的思想,构建在 B2C 电商场景下的项目实战。核心技术栈,是 Spring Boot + Dubbo 。未来,会重构成 Spring Cloud Alibaba 。
Stars: ✭ 5,312 (+575.83%)
Mutual labels:  dubbo, redis, elasticsearch, springboot, springcloud
Spring Boot Leaning
Spring Boot 2.X 最全课程代码
Stars: ✭ 2,008 (+155.47%)
Mutual labels:  mybatis, redis, mongodb, elasticsearch, springboot

Codacy Badge License Build Status codecov Quality Gate Status

🎉前言

项目命名为goodsKill一方面有商品秒杀项目的意思(好像有点chinglish的味道),另外也可理解为good skill,本项目就是希望搭建一套完整的项目框架,把一些好的技术和技巧整合进来(偏向于后端技术),方便学习和查阅。

本项目为慕课网仿购物秒杀网站,系统分为用户注册登录、秒杀商品管理模块。注册登录功能目前使用shiro完成权限验证。 此项目整体采用springMVC+RESTFUL风格,mybatis持久层框架,采用springcloud dubbo实现服务分布式服务调用,服务注册发现使用nacos server。

本项目扩展了秒杀功能,集成了jmock完成service层的测试,支持数据库分库分表,并提供基本的秒杀解决方案(通过模拟接口实现)。

  • 集成内嵌式H2数据库,方便独立进行单元功能测试

  • 集成sentinel限流组件,可以针对http请求以及dubbo rpc调用限流

  • 集成新版支付宝easySDK,通过当面扫完成扫码付款

  • 集成服务网关,采用Spring Cloud Gateway网关组件,并提供JWT用户鉴权功能

💎分支介绍

dev_gradle分支为使用gradle构建工具管理项目依赖(已停更),dev_maven分支对应maven构建工具(springframework版本4.x,已停更),master分支基于最新springcloud体系构建。本项目功能目前比较简陋且有很多不完善的地方,仅作学习参考之用,如果觉得本项目对你有帮助的请多多star支持一下👍~~~~。

附:码云项目链接https://gitee.com/techa/goodsKill ,clone速度慢的用码云仓库拉吧,不定期同步到码云~

✨技术选型

📌后端技术:

技术 名称 官网
SpringBoot 框架 https://spring.io/projects/spring-boot
MyBatis-Plus MyBatis增强工具 https://mp.baomidou.com/
PageHelper MyBatis物理分页插件 http://git.oschina.net/free/Mybatis_PageHelper
Hikari 数据库连接池 https://github.com/brettwooldridge/HikariCP
ZooKeeper 分布式协调服务 http://zookeeper.apache.org/
Redis 分布式缓存数据库 https://redis.io/
Kafka 消息队列 http://kafka.apache.org/
RabbitMQ 消息队列 https://www.rabbitmq.com/
Logback 日志组件 https://logback.qos.ch/
Protobuf & json 数据序列化 https://github.com/google/protobuf
Maven 项目构建管理 http://maven.apache.org/
SonarQube 项目代码质量监控 https://www.sonarqube.org/
Swagger2 项目API文档生成及测试工具 http://swagger.io/
Mockito mock类生成测试工具 https://site.mockito.org/
Jacoco 测试覆盖率报告插件 http://www.eclemma.org/jacoco/
Shiro 用户权限安全管理框架 https://shiro.apache.org/
MongoDB Mongo数据库 https://www.mongodb.com/
MySQL MySQL数据库 https://www.mysql.com/
Reactor 反应式异步编程 https://projectreactor.io/
Spring Session Spring会话管理 https://spring.io/projects/spring-session
Elasticsearch 全文搜索引擎 https://www.elastic.co
H2 H2数据库 http://www.h2database.com/html/main.html
Sharding-JDBC 分库分表组件 https://shardingsphere.apache.org
Spring Cloud Dubbo SpringCloud组件 https://spring.io/projects/spring-cloud-alibaba
Spring Cloud Sentinel SpringCloud限流降级组件 https://spring.io/projects/spring-cloud-alibaba
Spring Cloud Nacos SpringCloud组件 https://spring.io/projects/spring-cloud-alibaba
Spring Cloud Gateway SpringCloud网关组件 https://spring.io/projects/spring-cloud-gateway
Kotlin Kotlin https://kotlinlang.org/
Seata 分布式事务解决方案 http://seata.io/zh-cn/index.html

📌前端技术:

技术 名称 官网
JQuery 函式库 http://jquery.com/
Bootstrap 前端框架 http://getbootstrap.com/
LayUI 前端UI框架 http://www.layui.com/

📝项目模块介绍

goodsKill
|--goodskill-chat-provider                  ||聊天室服务提供者(待完成)
|--goodsKill-common                         ||项目公共服务(待补充)
|--goodskill-gateway                        ||微服务网关
|--goodsKill-es-provider                    ||elasticsearch搜索服务提供者,目前提供根据商品名称检索商品库
|   |--goodskill-es-api                     
|   |--goodskill-es-dao                     
|   |--goodskill-es-service                 
|--goodsKill-mongo-provider                 ||mongo存储服务提供者
|   |--goodskill-mongo-service              
|--goodsKill-spring-boot-provider           ||订单、用户、登录、商品管理服务提供者(待拆分)
|   |--goodsKill-api
|   |--goodsKill-mp-dao                     ||使用MyBatis-Plus访问MySql数据源  
|   |--goodsKill-entry                      
|   |--goodsKill-generator                  
|   |--goodsKill-service                    
|   |--goodsKill-util                       
|--goodskill-spring-boot-starter            ||项目配置自动装配
|--goodskill-web                            ||提供页面客户端访问,controller层在这一模块   
|--goodskill-job                            ||elastic-job定时任务 
|--goodskill-seata                          ||集成nacos+dubbo+shardingjdbc+seata的分布式事务解决方案示例

🧰开发环境版本说明

  • JDK: OpenJDK11
  • MySQL: 8.0.22+
  • Kafka: 2.7.0+
  • MongoDB: 4.4+
  • Elasticsearch: 7.10.1+
  • Sharding-JDBC: 4.1.1
  • RabbitMQ: 3.8.5+
  • SpringCloud: 2020.0.x
  • SpringBoot: 2.4.x
  • SpringCloudAlibaba: 2.2.5.RELEASE
  • Kotlin: 1.4.21
  • NacosServer: 1.4.1
  • SeataServer: 1.4.1

🕹️️如何启动项目

方法一:使用Docker镜像构建脚本

  • 项目根目录goodsKill中执行

    mvn clean install
    或 
    #跳过单元测试
    mvn clean install -DskipTests
    
  • 进入项目根目录(确保已安装compose以支持docker-compose命令),执行以下命令:

    docker-compose up (第一次运行只需执行此命令)
    or
    docker-compose up -d //-d后台运行
    or
    docker-compose up -d --build //build重新构建镜像文件,针对项目自定义镜像配置需要修改的情况
    or
    docker-compose up -d --no-recreate //如上次以构建容器,则此次会跳过构建容器
    

    :推荐使用docker-compose命令(推荐电脑运行内存16G以上),无需手动下载软件安装包,开箱即用。此命令会自动拉取docker镜像并以默认端口运行

    镜像 版本 端口 用户名密码
    Nacos 1.4.1 8848
    Redis latest 6379
    Kafka 2.13-2.7.0 9092
    KafkaManager latest 9000
    Mongo 4.4.3 27017
    MySQL 8.0.22 3306 root:Password123
    Zookeeper 3.6.2 2181
    Elasticsearch 7.10.1 9200 9300
    Kibana 7.10.1 5601
    RabbitMQ latest 5672 15672
    Zipkin latest 9411
    SeataServer latest 8091

:除以上镜像外,docker-compose.yml文件还包含项目构建命令,目前暂未列出。 若仅启动以上镜像不启动项目应用,可使用以下命令:

docker-compose -f goodskill-simple.yml up -d

方法二:使用IDEA运行项目

  • 如无docker运行环境,可参照官网安装上述应用,本地默认端口启动

  • 进入goodskill-gateway模块,通过GatewayApplication类main方法启动服务网关

  • 找到EsApplication类main方法启动远程服务

  • 找到GoodsKillRpcServiceApplication类main方法启动远程服务,并且需要在host中加入以下信息

    127.0.0.1       kafka
    127.0.0.1       nacos
    127.0.0.1       redis
    127.0.0.1       mysql
    127.0.0.1       zookeeper
    127.0.0.1       mongo
    127.0.0.1       elasticsearch
    127.0.0.1       rabbitmq
    127.0.0.1       zipkin
    
  • 进入goodsKill-web模块根目录,运行命令或直接通过SampleWebJspApplication类main方法启动

    mvn spring-boot:run -Dspring.profiles.active=docker
    
  • 如已安装MongoDB,可以main方法启动MongoReactiveApplication,通过使用该服务操作mongo库

⚠导入项目数据库基础数据 ️

  • 找到seckill.sql文件,在本地mysql数据库中建立seckill仓库并执行完成数据初始化操作

    :docker-compose启动方式会自动执行初始化脚本,因此无需执行该步骤

  • 启动完成后访问登录页面http://localhost:8080/goodskill/login,默认管理员账号admin123,密码:aa123456

额外功能(可选)

  • 已集成sentinel限流组件,支持nacos配置中心方式推送限流规则,使用时需启动sentinel控制台,并以18088端口启动,docker环境暂不支持。
  • 通过main方法启动GoodskillSeataApplication运行seata示例,运行前需启动seata-server服务,并配置nacos为seata注册中心和配置中心,另外还需在nacos控制台中增加以下配置(group需配置为SEATA_GROUP)
    service.vgroupMapping.my_test_tx_group=default
    store.mode=file
    
    可参考Seata官方Nacos配置文档:http://seata.io/zh-cn/docs/user/configuration/nacos.html

📦打包部署方法

  • 可参考Dockerfile文件,如:
FROM openjdk:11.0.9.1-jdk
COPY goodsKill-service/target/goodsKill-service.jar /app/goodsKill-service.jar
WORKDIR /app
CMD ["java", "-jar","-Dspring.profiles.active=docker","-Duser.timezone=GMT+08", "goodsKill-service.jar"]

❓常见问题

  • 使用idea启动SampleWebJspApplication类(goodsKill-web模块)时会出现访问不了页面的问题,eclipse无此问题。

    解决办法:配置启动类的工作目录为goodsKill-web

  • docker es镜像启动失败?

    出现此问题一般为linux环境,运行以下命令即可

    sysctl -w vm.max_map_count=262144
    
  • 新版支付宝SDK已集成,使用时需将AlipayRunner中的alipay对应配置替换成你的支付宝应用配置(本项目基于沙箱环境)

    //为了防止启动项目报错默认配置为1,可参考官方文档修改对应配置
    @Value("${alipay.merchantPrivateKey:1}")
    private String merchantPrivateKey;

    @Value("${alipay.alipayPublicKey:1}")
    private String alipayPublicKey;
    
    ......   

📚分库分表情况说明

数据库 是否分库 分库字段 是否分表 分表字段
success_killed MySQL 是(同一服务器中,分为seckill和seckill_01两个库) seckill_id 是(分为success_killed_0,success_kill_1两张表) user_phone

:其他表均未分库分表,默认使用seckill作为主库

🔖服务网关说明

🔥🔥秒杀方案

目前实现了几种秒杀方案,通过SeckillMockController提供测试接口

swagger主页测试地址: http://localhost:8080/goodskill/swagger-ui.html#/

swagger增强主页测试地址: http://localhost:8080/goodskill/doc.html

kafka状态监控页面地址: http://localhost:9000

zipkin链路跟踪页面地址: http://localhost:9411/zipkin/

  • 场景一:sychronized同步锁实现
  • 场景二:redisson分布式锁实现
  • 场景三:ActiveMQ实现(已废弃)
  • 场景四:Kafka消息队列实现
  • 场景五:数据库原子性更新
  • 场景六:实时等待秒杀处理结果(已废弃)
  • 场景七:zookeeper分布式锁
  • 场景八:使用redis进行秒杀商品减库存操作,秒杀结束后异步发送MQ,使用mongoDB完成数据落地
  • 场景九:SpringCloudStream RabbitMQ实现
  • 场景十:Sentinel限流+数据库原子性更新(需搭配sentinel控制台配置资源名limit的流控规则)

可在web控台查看秒杀结果,打印信息类似:

2019-03-25 13:40:42.123  INFO 1016 --- [io-18080-exec-9] o.s.w.controller.SeckillMockController   : 秒杀活动开始,秒杀场景三(activemq消息队列实现)时间:Mon Mar 25 13:40:42 CST 2019,秒杀id:1001
2019-03-25 13:40:49.050  INFO 1016 --- [ jmsContainer-1] o.s.web.mqlistener.SeckillTopicListener  : 最终成功交易笔数:100
2019-03-25 13:40:49.050  INFO 1016 --- [ jmsContainer-1] o.s.web.mqlistener.SeckillTopicListener  : 秒杀活动结束,秒杀场景三(activemq消息队列实现)时间:Mon Mar 25 13:40:49 CST 2019,秒杀id:1001

🔨后续更新计划

功能 进度 完成时间 说明
集成spring cloud alibaba组件 2020.5 目前已集成nacos、sentinel、dubbo组件
基于配置中心改造项目配置 2020.7 支付宝配置保存于nacos配置中心,防止配置泄露
新版支付宝SDK集成 2020.7 使用当面扫完成付款
完善jwt用户鉴权,并提供通用服务接口 2020.12
集成分布式事务解决方案 2021.2
聊天室功能 使用netty网络通信,maven分支已经实现,master分支待集成
前后端分离 目前前后端全部放在gooskill-web模块,不利于部署
丰富项目文档

API接口

image

API接口说明

image

💻页面展示

登录:

image

注册:

image

主页:

image

商品查询:

搜索框下拉商品候选信息基于elasticsearch实现,支持关键词高亮显示

image

用户角色权限管理:

image

商品列表限流:

image

Kafka状态监控

image

模拟秒杀接口测试

image

📑数据库表结构

image

📖参考文档

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].