博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
基于分布式微服务的秒杀抢购功能的实现
阅读量:5269 次
发布时间:2019-06-14

本文共 1431 字,大约阅读时间需要 4 分钟。

参考:

借下图

乐优.png

秒杀设计到的微服务

  1. 注册中心(Eurake) : @EnableEurekaServer开启注册中心,实现对各种微服务的集中管理
  2. 网关徽服务(zuul) : @EnableDiscoveryClient将服 务注册到到注册中心,@EnablezuulProxy开启 网关服务,对微服务路口做统一管理, 实现路由,降级(容错回退),限流的功能。如果多台服务器,可以通过路径和服务的绑定path: /user-service/* ; serviceld: user-service2,实现负载均衡(默认是Ribbon轮询,还有随机)
  3. 用户中心微服务(user-service) :@EnableDiscoveryClient将 用户中心微服务注册到到注册中心,实现注册和登录功能
  4. 授权中心微服务(auth-service) : @EnableDiscoveryClient将用户中心微服务注册到到注册中心实现对登录的鉴权。
  5. 商品微服务(item-service) : @EnableDiscoveryClient将商品微服务注册到到注册中心,做商品的添加和查询。

具体秒杀流程逻辑

  1. 网关对部分不需要登录认证的接口放行(要优化)1.注册用户,网关对注册放行
  2. 登录接口到网关,被路由到授权中心,授权中心微服务调用用户中心的登录接口进行校验,校验成功,利用JWT生成token,然后利用RSA非对称加密token,生成公钥和私钥保存,然后将token返回到客户端

    秒杀业务
  3. 在商品微服务中设置秒杀参数,根据参数的商品Id查询商品,构建商品秒杀表,添加,然后更新redis缓存
BoundHashOperations
hashOperations = this.stringRedisTemplate.boundHashOps(KEY PREFIX); 1/判断是否存在此K值 if (hashOperations.hasKey(KEY PREFI){ hashOperations.delete(KEY_ PREFIX); seckiloods.forEach(goods > hashOperatiosput(goos.getkud(.totring(), goods.getstock).totrin));))
  1. 使用秒杀功能需要登录验证,创建登录拦截(LoginInterceptor extends HandlerinterceptorAdapter)对token进行验证,认证通过将用户信息存放到线程域中,并且走一个限流拦截AccessInterceptor extends HandlerinterceptorAdapter)实现限流功能
  2. 构建秒杀路径(限流),加密,保存到redis缓存,隐藏秒杀路径,防止刷单。

    4. 秒杀
    4.1. 验证秒杀路径
    4.2. 读取库存, 减1后更新缓存
    4.3. 库存不足直接返回“排队中”
    4.4. 库存充足, 将商品信息封装入队MQ,然后直接返回“排队中”
  3. 然后订单微服务监听队列,消费队列,5.1判断库存不足,将该商品设置成不可秒杀状态,5.2查看是否秒杀到,秒杀到直接返回,5.3没有秒杀到,创建订单

GitHub:正版参考:

转载于:https://www.cnblogs.com/wuhen8866/p/11127341.html

你可能感兴趣的文章
趣谈Java变量的可见性问题
查看>>
C# 强制关闭当前程序进程(完全Kill掉不留痕迹)
查看>>
ssm框架之将数据库的数据导入导出为excel文件
查看>>
语音识别中的MFCC的提取原理和MATLAB实现
查看>>
验证组件FluentValidation的使用示例
查看>>
0320-学习进度条
查看>>
解决windows系统的oracle数据库不能启动ora-00119和ora-00130的问题
查看>>
ip相关问题解答
查看>>
MetaWeblog API Test
查看>>
反弹SHELL
查看>>
关闭Chrome浏览器的自动更新和升级提示
查看>>
移动、尺寸改变
查看>>
poj2255Tree Recovery【二叉树重构】
查看>>
tcpcopy 流量复制工具
查看>>
vue和react的区别
查看>>
第十一次作业
查看>>
负载均衡策略
查看>>
微信智能开放平台
查看>>
ArcGIS Engine 中的绘制与编辑
查看>>
Oracle--通配符、Escape转义字符、模糊查询语句
查看>>