为了账号安全,请及时绑定邮箱和手机立即绑定

java实现秒杀-jseckill

标签:
Java SpringBoot

jseckill



介绍演示架构图技术栈秒杀过程Quick Start源码解析做贡献联系作者

jseckill:Java实现的秒杀网站,基于Spring Boot 2.X。

jseckill:Seckill website implemented with Java, based on Spring Boot 2.X.

源码GitHub地址https://github.com/liushaoming/jseckill

演示

点击进入演示:http://jseckill.appjishu.com

注意:提升输入手机号时,随便输入一个11位的数字即可,不需要填自己的真实手机号


技术栈

  • Spring Boot 2.X

  • MyBatis

  • Redis, MySQL

  • Thymeleaf + Bootstrap

  • RabbitMQ

  • Zookeeper, Apache Curator




秒杀过程

  1. Google guava RateLimiter限流。 并发量大的时候,直接舍弃掉部分用户的请求 
    2.Redis判断是否秒杀过。避免重复秒杀。如果没有秒杀过, 
    在Redis操作前分布式加锁 Redis秒杀(减库存,并记录已秒杀成功者的userPhone) 
    然后分布式解锁 
    3.发送秒杀记录到RabbitMQ,并且马上返回结果到客户端 
    4.监听RabbitMQ的队列消息, 一条条地读取消息后,操作数据库。插入秒杀记录和减库存。 
    并手动ACK队列 
    详情见源码文档


Quick Start

  • clone源码

git clone https://github.com/liushaoming/jseckill.git

  • 在Intelij IDEA/eclipse里导入根路径下的pom.xml,再导入文件夹jseckill-backend下面的pom.xml, 等待maven依赖下载完毕

  • 修改application.properties里面的自己的Redis,MySQL,Zookeeper,RabbitMQ的连接配置

  • 右键JseckillBackendApplication.java--run as--Java Application

开始Debug


源码解析

 进入源码解析


Java后端限流

使用Google guava的RateLimiter来进行限流 
例如:每秒钟只允许10个人进入秒杀步骤. (可能是拦截掉90%的用户请求,拦截后直接返回"很遗憾,没抢到") 
AccessLimitServiceImpl.java代码 

package com.liushaoming.jseckill.backend.service.impl;import com.google.common.util.concurrent.RateLimiter;import com.liushaoming.jseckill.backend.service.AccessLimitService;import org.springframework.stereotype.Service;/** * 秒杀前的限流. * 使用了Google guava的RateLimiter */@Servicepublic class AccessLimitServiceImpl implements AccessLimitService {    /**     * 每秒钟只发出10个令牌,拿到令牌的请求才可以进入秒杀过程     */
    private RateLimiter seckillRateLimiter = RateLimiter.create(10);    /**     * 尝试获取令牌     * @return     */
    @Override
    public boolean tryAcquireSeckill() {        return seckillRateLimiter.tryAcquire();
    }
}

 查看更多源码解析

做贡献

欢迎提交代码发送Pull Requests, 有代码改进优化的建议的统一在Issues里面提。

喜欢本项目的,请在GitHub右上角点star



点击查看更多内容
1人点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消