精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Java秒殺系統:商品秒殺代碼實戰

新聞 前端
“商品秒殺”功能模塊是建立在“商品詳情”功能模塊的基礎之上,對于這一功能模塊而言,其主要的核心流程在于:前端發起搶購請求,該請求將攜帶著一些請求數據。

內容:

“商品秒殺”功能模塊是建立在“商品詳情”功能模塊的基礎之上,對于這一功能模塊而言,其主要的核心流程在于:前端發起搶購請求,該請求將攜帶著一些請求數據:待秒殺Id跟當前用戶Id等數據;后端接口在接收到請求之后,將執行一系列的判斷與秒殺處理邏輯,最終將處理結果返回給到前端。

[[271508]]

其中,后端接口的這一系列判斷與秒殺處理邏輯還是挺復雜的,Debug將其繪制成了如下的流程圖:

Java秒殺系統實戰系列:商品秒殺代碼實戰

從該業務流程圖中可以看出,后端接口在接收前端用戶的秒殺請求時,其核心處理邏輯為:

(1)首先判斷當前用戶是否已經搶購過該商品了,如果否,則代表用戶沒有搶購過該商品,可以進入下一步的處理邏輯

(2)判斷該商品可搶的剩余數量,即庫存是否充足(即是否大于0),如果是,則進入下一步的處理邏輯

(3)扣減庫存,并更新數據庫的中對應搶購記錄的庫存(一般是減一操作),判斷更新庫存的數據庫操作是否成功了,如果是,則創建用戶秒殺成功的訂單,并異步發送短信或者郵件通知信息通知用戶

(4)以上的操作邏輯如果有任何一步是不滿足條件的,則直接結束整個秒殺的流程,即秒殺失敗!

接下來,我們仍然基于MVC的開發模式,采用代碼實戰實現這一功能模塊!

(1)首先是在KillController 控制器開發接收“前端用戶秒殺請求”的功能方法,其中,該方法需要接收前端請求過來的“待秒殺Id”,而當前用戶的Id可以通過上一篇博文介紹的Shiro 的會話模塊Session進行獲取!

其源代碼如下所示:

  1. private static final String prefix = "kill"
  2.   
  3. @Autowired 
  4. private IKillService killService; 
  5.   
  6. @Autowired 
  7. private ItemKillSuccessMapper itemKillSuccessMapper; 
  8.   
  9. /*** 
  10.  * 商品秒殺核心業務邏輯 
  11.  */ 
  12. @RequestMapping(value = prefix+"/execute",method = RequestMethod.POST,consumes = MediaType.APPLICATION_JSON_UTF8_VALUE) 
  13. @ResponseBody 
  14. public BaseResponse execute(@RequestBody @Validated KillDto dto, BindingResult result, HttpSession session){ 
  15.  if (result.hasErrors() || dto.getKillId()<=0){ 
  16.  return new BaseResponse(StatusCode.InvalidParams); 
  17. //獲取當前登錄用戶的信息 
  18.  Object uId=session.getAttribute("uid"); 
  19.  if (uId==null){ 
  20.  return new BaseResponse(StatusCode.UserNotLogin); 
  21.  } 
  22.  Integer userId= (Integer)uId ; 
  23.  BaseResponse response=new BaseResponse(StatusCode.Success); 
  24.  try { 
  25.  Boolean res=killService.killItem(dto.getKillId(),userId); 
  26.  if (!res){ 
  27.  return new BaseResponse(StatusCode.Fail.getCode(),"哈哈~商品已搶購完畢或者不在搶購時間段哦!"); 
  28.  } 
  29.  }catch (Exception e){ 
  30.  response=new BaseResponse(StatusCode.Fail.getCode(),e.getMessage()); 
  31.  } 
  32.  return response; 
  33. }復制代碼 

其中,KillDto對象主要封裝了“待秒殺Id”等字段信息,其主要用于接收前端過來的用戶秒殺請求信息,源代碼如下所示:

  1. @Data 
  2. @ToString 
  3. public class KillDto implements Serializable{ 
  4.  @NotNull 
  5.  private Integer killId; 
  6.   
  7.  private Integer userId; //在整合shiro之后,userId字段可以不需要了!因為通過session進行獲取了 
  8. }復制代碼 

(2)緊接著是開發 killService.killItem(dto.getKillId(),userId) 的功能,該功能對應的代碼的編寫邏輯可以參見本文剛開始介紹時的流程圖!其完整源代碼如下所示:

  1. @Autowired 
  2. private ItemKillSuccessMapper itemKillSuccessMapper; 
  3.   
  4. @Autowired 
  5. private ItemKillMapper itemKillMapper; 
  6.   
  7. @Autowired 
  8. private RabbitSenderService rabbitSenderService; 
  9.   
  10. //商品秒殺核心業務邏輯的處理 
  11. @Override 
  12. public Boolean killItem(Integer killId, Integer userId) throws Exception { 
  13.  Boolean result=false
  14.   
  15.  //TODO:判斷當前用戶是否已經搶購過當前商品 
  16.  if (itemKillSuccessMapper.countByKillUserId(killId,userId) <= 0){ 
  17.  //TODO:查詢待秒殺商品詳情 
  18.  ItemKill itemKill=itemKillMapper.selectById(killId); 
  19.   
  20.  //TODO:判斷是否可以被秒殺canKill=1? 
  21.  if (itemKill!=null && 1==itemKill.getCanKill() ){ 
  22.  //TODO:扣減庫存-減一 
  23.  int res=itemKillMapper.updateKillItem(killId); 
  24.   
  25.  //TODO:扣減是否成功?是-生成秒殺成功的訂單,同時通知用戶秒殺成功的消息 
  26.  if (res>0){ 
  27.  commonRecordKillSuccessInfo(itemKill,userId); 
  28.   
  29.  result=true
  30.  } 
  31.  } 
  32.  }else
  33.  throw new Exception("您已經搶購過該商品了!"); 
  34.  } 
  35.  return result; 
  36. }復制代碼 

其中,itemKillMapper.selectById(killId); 表示用于獲取待秒殺商品的詳情信息,這在前面的篇章中已經介紹過了;而 itemKillMapper.updateKillItem(killId); 主要用于扣減庫存(在這里是減1操作),其對應的動態Sql如下所示:

  1. <!--搶購商品,剩余數量減一--> 
  2.  <update id="updateKillItem"
  3.  UPDATE item_kill 
  4.  SET total = total - 1 
  5.  WHERE 
  6.  id = #{killId} 
  7.  </update>復制代碼 

(3)值得一提的是,在上面 KillService執行killItem功能方法時,還開發了一個通用的方法:用戶秒殺成功后創建秒殺訂單、并異步發送通知消息給到用戶秒殺成功的信息!該方法為 commonRecordKillSuccessInfo(itemKill,userId); 其完整的源代碼如下所示:

  1. /** 
  2.  * 通用的方法-用戶秒殺成功后創建訂單-并進行異步郵件消息的通知 
  3.  * @param kill 
  4.  * @param userId 
  5.  * @throws Exception 
  6.  */ 
  7. private void commonRecordKillSuccessInfo(ItemKill kill, Integer userId) throws Exception{ 
  8.  //TODO:記錄搶購成功后生成的秒殺訂單記錄 
  9.   
  10.  ItemKillSuccess entity=new ItemKillSuccess(); 
  11.  String orderNo=String.valueOf(snowFlake.nextId()); 
  12.   
  13.  //entity.setCode(RandomUtil.generateOrderCode()); //傳統時間戳+N位隨機數 
  14.  entity.setCode(orderNo); //雪花算法 
  15.  entity.setItemId(kill.getItemId()); 
  16.  entity.setKillId(kill.getId()); 
  17.  entity.setUserId(userId.toString()); 
  18.  entity.setStatus(SysConstant.OrderStatus.SuccessNotPayed.getCode().byteValue()); 
  19.  entity.setCreateTime(DateTime.now().toDate()); 
  20.  //TODO:學以致用,舉一反三 -> 仿照單例模式的雙重檢驗鎖寫法 
  21.  if (itemKillSuccessMapper.countByKillUserId(kill.getId(),userId) <= 0){ 
  22.  int res=itemKillSuccessMapper.insertSelective(entity); 
  23.   
  24.  if (res>0){ 
  25.  //TODO:進行異步郵件消息的通知=rabbitmq+mail 
  26.  rabbitSenderService.sendKillSuccessEmailMsg(orderNo); 
  27.   
  28.  //TODO:入死信隊列,用于 “失效” 超過指定的TTL時間時仍然未支付的訂單 
  29.  rabbitSenderService.sendKillSuccessOrderExpireMsg(orderNo); 
  30.  } 
  31.  } 
  32. }復制代碼 

該方法涉及的功能模塊稍微比較多,即主要包含了“分布式唯一ID-雪花算法的應用”、“整合RabbitMQ異步發送通知消息給用戶”、“基于JavaMail開發發送郵件的功能”、“死信隊列失效超時未支付的訂單”等等,這些功能模塊將在后面的小節一步一步展開進行介紹!

(4)最后是需要在前端頁面info.jsp開發“提交用戶秒殺請求”的功能,其部分核心源代碼如下所示:

Java秒殺系統實戰系列:商品秒殺代碼實戰

其中,提交的數據是采用application/json的格式提交的,即json的格式!并采用POST的請求方法進行交互!

(5)將整個系統、項目采用外置的tomcat運行起來,觀察控制臺的輸出信息,如果沒有報錯信息,則代表整體的實戰代碼沒有語法級別的錯誤!點擊“詳情”按鈕,登錄成功后,進入“待秒殺商品的的詳情”,可以查看當前待秒殺商品的詳情信息;點擊“搶購”按鈕,即可進入“秒殺”環節,后端經過一系列的邏輯處理之后,將處理的結果返回給到前端,如下圖所示:

[[271509]]

與此同時,當前用戶的郵箱中將收到一條“秒殺成功”的郵件信息,表示當前用戶已經成功秒殺搶到當前商品了,如下圖所示:

Java秒殺系統實戰系列:商品秒殺代碼實戰

除此之外,在數據庫表item_kill_success中也將會生成一筆“秒殺成功的訂單記錄”,如下圖所示:

Java秒殺系統實戰系列:商品秒殺代碼實戰

當然,對于“郵件的通知”和“秒殺成功生成的訂單的訂單編號”的功能,在本節我們主要是分享介紹了秒殺系統中用戶的“秒殺/搶購請求”功能!

責任編輯:張燕妮 來源: 今日頭條
相關推薦

2020-09-01 07:47:32

Redis秒殺微信

2020-10-14 07:20:53

高并發

2016-01-06 10:10:25

2018-09-15 04:59:01

2021-07-09 07:21:40

SpringBootRedisLUA

2020-04-01 17:31:03

Redis系統秒殺

2023-11-27 18:07:05

Go并發編程

2022-08-26 10:24:48

架構Golang

2020-12-02 06:14:35

秒殺系統

2024-11-25 09:10:03

2021-12-03 10:47:28

WOT技術峰會技術

2024-10-10 17:23:31

2021-12-20 07:03:54

秒殺系統擴容

2021-06-23 06:48:42

秒殺Java電商

2025-02-20 00:01:00

2025-03-27 01:10:00

HashMap分段鎖CAS

2019-12-19 10:10:45

秒殺系統高并發

2021-07-29 08:13:05

高并發秒殺商品秒殺系統

2018-06-24 08:40:21

秒殺架構架構優化
點贊
收藏

51CTO技術棧公眾號

亚洲区综合中文字幕日日| 色帝国亚洲欧美在线| 日本成人在线电影网| 久久精品最新地址| 欧产日产国产精品98| 3d欧美精品动漫xxxx无尽| 亚洲人123区| 精品人伦一区二区三区| 中文字幕人妻色偷偷久久| 欧美在线看片| 亚洲香蕉成视频在线观看| 999在线精品视频| 黄视频网站在线观看| 中文字幕亚洲电影| 久久99精品久久久久久久久久 | 国产黄色一区二区三区 | 亚洲成年人影院| 水蜜桃一区二区三区| 亚洲精品一级片| 欧美aaaaaa午夜精品| 性色av一区二区三区在线观看| 欧美日韩中文字幕视频| 狼人天天伊人久久| 91精品免费观看| 亚洲综合在线网站| av中文字幕在线观看第一页| 国产精品超碰97尤物18| 蜜桃91精品入口| 成人免费观看在线视频| 久久99国产精品久久99| 国产精品91在线| 天天操天天爽天天干| 欧美不卡视频| 久久九九免费视频| 一级片久久久久| 亚洲区小说区图片区qvod| 日韩精品中文字幕一区| 国产又黄又猛的视频| 成人网ww555视频免费看| 精品国产鲁一鲁一区二区张丽| 女女同性女同一区二区三区按摩| 波多野结衣在线影院| 久久久午夜电影| 久久久久国产精品视频| 日韩中文字幕免费在线观看| 国产成人精品亚洲日本在线桃色| 成人a在线视频| 91久久久久久久久久久久| 日韩国产欧美一区二区三区| 91国偷自产一区二区三区的观看方式| 欧美三级小视频| 亚洲色图国产| 久久国产色av| 久草中文在线视频| 国内精品福利| 久久久免费精品视频| 日本一级淫片色费放| 亚洲国产导航| 91精品国产电影| 中文字幕亚洲精品一区| 欧美亚洲免费| 国产精品中文在线| 7777久久亚洲中文字幕| 欧美96一区二区免费视频| 国产精品永久免费观看| 国产又大又黑又粗| 国产高清久久久久| 国产精品一码二码三码在线| 无码国精品一区二区免费蜜桃| 91网站在线播放| 色播亚洲视频在线观看| 麻豆视频网站在线观看| 日韩美女啊v在线免费观看| 福利在线小视频| av资源在线| 91福利在线看| www.色欧美| 一区二区三区在线资源| 亚洲国产日韩欧美在线99| 日韩人妻无码一区二区三区| 日韩伦理视频| 欧美激情奇米色| 色婷婷av国产精品| 日本美女一区二区三区| 91国产丝袜在线放| 天堂av电影在线观看| 日本一区免费视频| 成人短视频在线观看免费| 日韩精品av| 欧美三级电影一区| 成人做爰69片免费| 国产一区二区亚洲| 久久国产精品久久久| 亚洲另类在线观看| 国产精品亚洲第一| 日本免费高清一区| free性欧美hd另类精品| 欧美日韩视频免费播放| 在线观看免费不卡av| 男人的天堂久久| 久久亚洲精品成人| caoporn国产| 国产精品亚洲综合一区在线观看| 欧美伦理一区二区| 免费在线看电影| 日本丰满少妇一区二区三区| 亚洲黄色小说在线观看| 成人情趣视频| 91精品国产九九九久久久亚洲| 亚洲一区二区色| 96av麻豆蜜桃一区二区| 中文字幕在线中文字幕日亚韩一区 | 中文字幕在线播| 成人精品一区二区三区中文字幕| 亚洲一区二区精品在线观看| 免费在线小视频| 精品奇米国产一区二区三区| 亚洲图片第一页| 免费一级欧美片在线播放| 91嫩草视频在线观看| av资源在线观看免费高清| 精品久久久久久亚洲精品| 欧洲在线免费视频| 日韩.com| 国产精品电影在线观看| 天堂影院在线| 精品久久香蕉国产线看观看亚洲| 熟妇无码乱子成人精品| 日韩精品一区二区久久| 日本精品视频在线观看| 亚洲欧美色视频| 亚洲午夜av在线| 少妇性l交大片7724com| 91精品亚洲| 国产精品视频大全| 毛片免费在线观看| 欧美性猛交xxxx富婆| av网页在线观看| 伊人成年综合电影网| av一区和二区| 天堂8中文在线| 日韩精品一区二区三区swag| 国产一区二区播放| 国内精品久久久久影院色| 在线码字幕一区| 亚洲国产91视频| 日韩有码在线电影| 国产精品视频在线观看免费 | 国产精品资源网站| 日韩 欧美 自拍| 亚洲一区网址| 国内精品免费午夜毛片| 色综合免费视频| 狠狠躁天天躁日日躁欧美| 免费a级黄色片| 久久不射网站| 五月天亚洲综合情| 色综合视频一区二区三区44| 久久久黄色av| 免费观看的毛片| 欧美日韩国产页| 国产精品扒开腿做爽爽| 日韩激情一区二区| 伊人狠狠色丁香综合尤物| 深夜福利亚洲| 欧美高清第一页| 日韩美女一级视频| 欧美性大战久久久久久久| 一级免费黄色录像| 国产成人精品免费在线| 久久99中文字幕| av中字幕久久| 18成人在线| 自拍网站在线观看| 色悠悠久久久久| www.黄色国产| 色综合天天综合网天天看片| 青青青视频在线免费观看| 国产在线观看免费一区| 精品视频免费在线播放| 国产尤物久久久| 亚洲一区中文字幕在线观看| 国产激情视频在线看| 国产亚洲精品久久久久久777| 亚洲一区二区色| 亚瑟在线精品视频| 亚洲天堂岛国片| 高清国产一区二区| 日韩视频在线免费看| 亚洲乱码精品| 日本一区二区精品| 久久久91麻豆精品国产一区| 欧美有码在线视频| 黄网站视频在线观看| 日韩激情av在线播放| 国产精品久久久久久无人区| 午夜精彩视频在线观看不卡| 青青青视频在线播放| www.亚洲精品| 在线观看国产一级片| 亚洲视频成人| 最新视频 - x88av| 国产午夜一区| 国产综合18久久久久久| 亚洲精品三区| 国产精品27p| 国产白浆在线免费观看| 久久伊人精品一区二区三区| 久草在现在线| 精品sm捆绑视频| 91精品人妻一区二区三区果冻| 第一福利永久视频精品| 欧美日韩国产精品综合| 国产精品国产a级| 成人精品999| 成人高清视频在线观看| 欧美丝袜在线观看| 日韩影院免费视频| 18禁免费无码无遮挡不卡网站| 午夜欧美精品久久久久久久| 一区二区三区四区视频在线观看 | 亚洲欧美在线第一页| 国精产品乱码一区一区三区四区| 7777精品伊人久久久大香线蕉完整版 | 性欧美videohd高精| 97国产精品视频人人做人人爱| a视频在线免费看| 精品激情国产视频| www.视频在线.com| 亚洲人成在线一二| 亚洲欧洲综合在线| 亚洲国产成人在线视频| 亚洲高清视频网站| 日韩视频免费观看高清完整版| 91精品人妻一区二区三区果冻| 欧美日韩激情在线| 黄色一区二区视频| 欧美在线free| 小泽玛利亚一区二区三区视频| 色噜噜狠狠一区二区三区果冻| 日本韩国欧美中文字幕| 五月婷婷综合激情| 成人精品免费在线观看| 欧美日韩裸体免费视频| 精品国产午夜福利| 色婷婷久久久久swag精品| 色av性av丰满av| 欧洲精品视频在线观看| 国产成人无码专区| 欧美视频一区二区三区在线观看 | 日韩精品欧美国产精品忘忧草 | 精品国产一区二区三区在线观看 | 国产suv精品一区二区| 中文不卡1区2区3区| 国产成人精品在线观看| 日韩精品免费观看视频| 国产精品一区专区欧美日韩| 国产美女视频一区二区| 99在线视频首页| 另类在线视频| 欧美日韩日本网| 成人亚洲一区二区| 精品91一区二区三区| 在线免费高清一区二区三区| 噜噜噜久久亚洲精品国产品麻豆| 欧美专区18| 中文字幕在线视频精品| 国产不卡视频一区二区三区| 天天躁日日躁狠狠躁av麻豆男男| 久久综合色8888| 欧美性生交大片| 亚洲国产综合91精品麻豆| 在线观看日本视频| 欧美高清性hdvideosex| 黄色成人一级片| 亚洲日本成人女熟在线观看| 黄色网址在线免费| 97欧美精品一区二区三区| 992tv国产精品成人影院| 99久久精品免费看国产一区二区三区 | 日本性爱视频在线观看| 欧美在线视频一区二区| 亚洲福利影视| 久久资源亚洲| 在线成人超碰| 日本精品一区二区三区四区| 激情国产一区二区| 亚洲一区二区三区无码久久| 亚洲欧洲精品天堂一级| 日韩色图在线观看| 5566中文字幕一区二区电影| 天堂中文在线8| 欧美另类高清videos| 日本欧美日韩| 国产aⅴ精品一区二区三区黄| 国产一区二区区别| 国产一级做a爰片久久毛片男| 日韩中文字幕一区二区三区| 任你躁av一区二区三区| 国产精品―色哟哟| 可以免费看的av毛片| 91麻豆精品国产91久久久更新时间| 无码精品人妻一区二区三区影院| 久久精品视频导航| 奇米777日韩| 国精产品99永久一区一区| 99热在线成人| aaa毛片在线观看| 成人免费av在线| 国产精品久久久精品四季影院| 欧洲一区二区三区在线| 五月婷婷丁香花| 欧美日韩不卡合集视频| 欧美激情啪啪| 日本一区高清在线视频| 在线午夜精品| 日本中文字幕精品| 亚洲欧美一区二区视频| 亚洲精品91天天久久人人| 日韩精品在线免费观看视频| 美女尤物在线视频| 2014亚洲精品| 伊人情人综合网| 欧洲美女亚洲激情| 中文字幕精品一区| 无码人妻一区二区三区免费| 亚洲激情 国产| 91av久久| 国产亚洲一区二区三区在线播放| 中文不卡在线| 国模大尺度视频| 亚洲欧美国产高清| 国产精选久久久| 久久久精品2019中文字幕神马| 成人黄色免费观看| 清纯唯美一区二区三区| 天堂成人国产精品一区| 亚洲做受高潮无遮挡| 色老综合老女人久久久| 美女欧美视频在线观看免费 | 久久精品欧美日韩| 一级片在线观看免费| 亚洲欧洲视频在线| 桃色一区二区| 少妇特黄a一区二区三区| 天堂成人免费av电影一区| a级片在线观看| 欧美午夜影院一区| 欧美另类极品| 成人中文字幕+乱码+中文字幕| 亚洲啊v在线观看| 国产又黄又嫩又滑又白| 亚洲一区二区黄色| 污视频软件在线观看| 欧美在线视频免费| 欧美日韩伦理| theporn国产精品| 亚洲综合免费观看高清在线观看| 成人午夜免费福利| 97色在线视频观看| 你微笑时很美电视剧整集高清不卡| 北条麻妃在线一区| 国产精品久久久久三级| av中文字幕观看| 97视频在线观看亚洲| 少妇精品久久久一区二区三区| 一区二区三区视频网| 亚洲欧美精品午睡沙发| 日韩永久免费视频| 国产成人涩涩涩视频在线观看| 久久国产精品成人免费观看的软件| 日韩视频在线观看一区二区三区| 亚洲香肠在线观看| 免费在线稳定资源站| 91免费看片在线| 亚洲毛片在线| 国产探花视频在线播放| 欧美一级理论性理论a| 美女视频在线免费| 在线观看日韩片| 99精品久久99久久久久| 在线观看色网站| 国模精品系列视频| 欧美精品一区二区三区中文字幕 | 超碰成人在线免费| 情侣黄网站免费看| 亚洲欧美自拍偷拍色图| 手机av免费在线观看| 国产精品天天狠天天看| 激情欧美一区| 欧美自拍偷拍网| 日韩av网址在线| www.成人在线.com| 免费无码不卡视频在线观看| 亚洲欧洲精品天堂一级| 免费在线黄色网址| 国产视频99| 国产在线观看免费一区| 人人妻人人爽人人澡人人精品 | 国产99久久久国产精品免费看|