Java秒杀系统实战系列~商品秒杀代码实战

  • 日期:08-27
  • 点击:(1803)


总结:

这篇博文是“Java尖峰系统战斗系列文章”的第六篇。在这篇博文中,我们将进入整个秒杀系统核心功能模块的代码开发,即“商品秒杀”功能模块的代码。

含量:

“商品加标”功能模块基于“商品详细信息”功能模块。对于此功能模块,主要核心流程是前端发起快照请求,请求将携带一些请求数据:Spike Id和当前用户ID以及其他数据;接收到请求后,后端接口将执行一系列判断和尖峰处理逻辑,最后将处理结果返回给前端。

其中,这一系列判断和尖峰处理逻辑的后端接口相当复杂,Debug将其绘制成以下流程图:

图像

从服务流程图可以看出,当后端接口收到前端用户的尖峰请求时,核心处理逻辑是:

(1)首先确定当前用户是否已抢购产品,如果没有,则用户未抢购产品,并可继续执行下一个处理逻辑

(2)确定商品可以被抢夺的剩余数量,即库存是否足够(即,是否大于0),如果是,则进入下一个处理逻辑

(3)扣除库存,更新数据库中相应快照记录的库存(一般减去一次操作),判断更新库存的数据库操作是否成功,如果是,则创建成功的订单用户被加标,并异步发送短信。或通过电子邮件通知用户

件,则直接结束整个尖峰过程,即尖峰失败!

接下来,我们仍然基于MVC开发模型,使用代码来实现这个功能模块!

(1)首先,KillController控制器开发一种接收“前端用户尖峰请求”的功能方法,该方法需要从前端请求接收“等待终止ID”,并且当前用户需要可以通过之前的博客文章介绍ID。 Shiro的会话模块会议可用!

源代码如下:

其中,KillDto对象主要封装“等待Id”等字段信息,主要用于从前端接收用户尖峰请求信息,源代码如下:

(2)接下来是开发killService.killItem(dto.getKillId(),userId)的功能。编写与此函数对应的代码的逻辑可以在本文开头的流程图中看到!完整的源代码如下:

其中,itemKillMapper.selectById(killId);表示用于获取加标货物的详细信息,这已在前一章中介绍过;和itemKillMapper.updateKillItem(killId);主要用于扣除库存(这里是减少)1操作),其对应的动态Sql如下:

通知消息以杀死成功的信息!方法是commonRecordKillSuccessInfo(itemKill,userId);其完整源代码如下:

该方法涉及相对大量的功能模块,即主要包括“分布式唯一ID-snowflake算法应用”,“集成RabbitMQ异步向用户发送通知消息”,“基于JavaMail开发发送邮件”,“死信” “队列失败超时未付订单”等等,这些功能模块将在以下章节中逐步介绍!

(4)最后,您需要在首页info.jsp上开发“提交用户尖峰请求”功能。一些核心源代码如下:

图像

其中,提交的数据以application/json的格式提交,这是json的格式!并使用POST请求方法进行交互!

(5)用外部tomcat运行整个系统和项目,观察控制台的输出信息。如果没有错误消息,则表示实际战斗代码中没有语法级错误!点击“详细信息”按钮,登录成功后,输入“待加标商品的详细信息”,即可查看当前加标商品的详细信息;点击“购买”按钮,即可进入“秒杀”链接,后端通过一系列逻辑处理后,处理结果返回到前端,如下图所示:

图像

同时,当前用户的邮箱将收到“成功成功”的电子邮件消息,表明当前用户已成功飙升以获取当前产品,如下所示:

图像

此外,将在数据库表item_kill_success中生成“成功订单记录”,如下所示:

图像

当然,对于“邮件通知”和“成功生成订单的订单数量”,我们将在以下章节中分享介绍。在本节中,我们主要分享峰值系统中用户的“快速购买”。请求“功能!

补充说明:

由于相应的博客更新可能不是很快,如果你想快速入门和整个系统,你可以阅读:Java Mall秒杀系统设计和实际视频教程(SpringBoot版)

小红牛

0.2

2019.07.30 10: 24

字数1495

总结:

这篇博文是“Java尖峰系统战斗系列文章”的第六篇。在这篇博文中,我们将进入整个秒杀系统核心功能模块的代码开发,即“商品秒杀”功能模块的代码。

含量:

“商品加标”功能模块基于“商品详细信息”功能模块。对于此功能模块,主要核心流程是前端发起快照请求,请求将携带一些请求数据:Spike Id和当前用户ID以及其他数据;接收到请求后,后端接口将执行一系列判断和尖峰处理逻辑,最后将处理结果返回给前端。

其中,这一系列判断和尖峰处理逻辑的后端接口相当复杂,Debug将其绘制成以下流程图:

图像

从服务流程图可以看出,当后端接口收到前端用户的尖峰请求时,核心处理逻辑是:

(1)首先确定当前用户是否已抢购产品,如果没有,则用户未抢购产品,并可继续执行下一个处理逻辑

(2)确定商品可以被抢夺的剩余数量,即库存是否足够(即,是否大于0),如果是,则进入下一个处理逻辑

(3)扣除库存,更新数据库中相应快照记录的库存(一般减去一次操作),判断更新库存的数据库操作是否成功,如果是,则创建成功的订单用户被加标,并异步发送短信。或通过电子邮件通知用户

件,则直接结束整个尖峰过程,即尖峰失败!

接下来,我们仍然基于MVC开发模型,使用代码来实现这个功能模块!

(1)首先,KillController控制器开发一种接收“前端用户尖峰请求”的功能方法,该方法需要从前端请求接收“等待终止ID”,并且当前用户需要可以通过之前的博客文章介绍ID。 Shiro的会话模块会议可用!

源代码如下:

其中,KillDto对象主要封装“等待Id”等字段信息,主要用于从前端接收用户尖峰请求信息,源代码如下:

(2)接下来是开发killService.killItem(dto.getKillId(),userId)的功能。编写与此函数对应的代码的逻辑可以在本文开头的流程图中看到!完整的源代码如下:

其中,itemKillMapper.selectById(killId);表示用于获取加标货物的详细信息,这已在前一章中介绍过;和itemKillMapper.updateKillItem(killId);主要用于扣除库存(这里是减少)1操作),其对应的动态Sql如下:

通知消息以杀死成功的信息!方法是commonRecordKillSuccessInfo(itemKill,userId);其完整源代码如下:

该方法涉及相对大量的功能模块,即主要包括“分布式唯一ID-snowflake算法应用”,“集成RabbitMQ异步向用户发送通知消息”,“基于JavaMail开发发送邮件”,“死信” “队列失败超时未付订单”等等,这些功能模块将在以下章节中逐步介绍!

(4)最后,您需要在首页info.jsp上开发“提交用户尖峰请求”功能。一些核心源代码如下:

图像

其中,提交的数据以application/json的格式提交,这是json的格式!并使用POST请求方法进行交互!

(5)用外部tomcat运行整个系统和项目,观察控制台的输出信息。如果没有错误消息,则表示实际战斗代码中没有语法级错误!点击“详细信息”按钮,登录成功后,输入“待加标商品的详细信息”,即可查看当前加标商品的详细信息;点击“购买”按钮,即可进入“秒杀”链接,后端通过一系列逻辑处理后,处理结果返回到前端,如下图所示:

图像

同时,当前用户的邮箱将收到“成功成功”的电子邮件消息,表明当前用户已成功飙升以获取当前产品,如下所示:

图像

此外,将在数据库表item_kill_success中生成“成功订单记录”,如下所示:

图像

当然,对于“邮件通知”和“成功生成订单的订单数量”,我们将在以下章节中分享介绍。在本节中,我们主要分享峰值系统中用户的“快速购买”。请求“功能!

补充说明:

由于相应的博客更新可能不是很快,如果你想快速入门和整个系统,你可以阅读:Java Mall秒杀系统设计和实际视频教程(SpringBoot版)

总结:

这篇博文是“Java尖峰系统战斗系列文章”的第六篇。在这篇博文中,我们将进入整个秒杀系统核心功能模块的代码开发,即“商品秒杀”功能模块的代码。

含量:

“商品加标”功能模块基于“商品详细信息”功能模块。对于此功能模块,主要核心流程是前端发起快照请求,请求将携带一些请求数据:Spike Id和当前用户ID以及其他数据;接收到请求后,后端接口将执行一系列判断和尖峰处理逻辑,最后将处理结果返回给前端。

其中,这一系列判断和尖峰处理逻辑的后端接口相当复杂,Debug将其绘制成以下流程图:

图像

从服务流程图可以看出,当后端接口收到前端用户的尖峰请求时,核心处理逻辑是:

(1)首先确定当前用户是否已抢购产品,如果没有,则用户未抢购产品,并可继续执行下一个处理逻辑

(2)确定商品可以被抢夺的剩余数量,即库存是否足够(即,是否大于0),如果是,则进入下一个处理逻辑

(3)扣除库存,更新数据库中相应快照记录的库存(一般减去一次操作),判断更新库存的数据库操作是否成功,如果是,则创建成功的订单用户被加标,并异步发送短信。或通过电子邮件通知用户

件,则直接结束整个尖峰过程,即尖峰失败!

接下来,我们仍然基于MVC开发模型,使用代码来实现这个功能模块!

(1)首先,KillController控制器开发一种接收“前端用户尖峰请求”的功能方法,该方法需要从前端请求接收“等待终止ID”,并且当前用户需要可以通过之前的博客文章介绍ID。 Shiro的会话模块会议可用! 源代码如下:

其中,KillDto对象主要封装“等待Id”等字段信息,主要用于从前端接收用户尖峰请求信息,源代码如下:

(2)接下来是开发killService.killItem(dto.getKillId(),userId)的功能。编写与此函数对应的代码的逻辑可以在本文开头的流程图中看到!完整的源代码如下:

其中,itemKillMapper.selectById(killId);表示用于获取加标货物的详细信息,这已在前一章中介绍过;和itemKillMapper.updateKillItem(killId);主要用于扣除库存(这里是减少)1操作),其对应的动态Sql如下:

通知消息以杀死成功的信息!方法是commonRecordKillSuccessInfo(itemKill,userId);其完整源代码如下:

该方法涉及相对大量的功能模块,即主要包括“分布式唯一ID-snowflake算法应用”,“集成RabbitMQ异步向用户发送通知消息”,“基于JavaMail开发发送邮件”,“死信” “队列失败超时未付订单”等等,这些功能模块将在以下章节中逐步介绍!

(4)最后,您需要在首页info.jsp上开发“提交用户尖峰请求”功能。一些核心源代码如下:

图像

其中,提交的数据以application/json的格式提交,这是json的格式!并使用POST请求方法进行交互!

(5)用外部tomcat运行整个系统和项目,观察控制台的输出信息。如果没有错误消息,则表示实际战斗代码中没有语法级错误!点击“详细信息”按钮,登录成功后,输入“待加标商品的详细信息”,即可查看当前加标商品的详细信息;点击“购买”按钮,即可进入“秒杀”链接,后端通过一系列逻辑处理后,处理结果返回到前端,如下图所示:

图像

同时,当前用户的邮箱将收到“成功成功”的电子邮件消息,表明当前用户已成功飙升以获取当前产品,如下所示:

图像

此外,将在数据库表item_kill_success中生成“成功订单记录”,如下所示:

图像

当然,对于“邮件通知”和“成功生成订单的订单数量”,我们将在以下章节中分享介绍。在本节中,我们主要分享峰值系统中用户的“快速购买”。请求“功能!

补充说明:

由于相应的博客更新可能不是很快,如果你想快速入门和整个系统,你可以阅读:Java Mall秒杀系统设计和实际视频教程(SpringBoot版)