【原創(chuàng)】拉勾課程速推指南 第六階段 分布式消息服務(wù)中間件進階 模塊一 開源消息中間件RabbitMQ

文章內(nèi)容輸出來源:拉勾教育Java高薪訓(xùn)練營

學(xué)習心得

【拉勾課程速推指南】學(xué)習心得

課程介紹

第六階段 分布式消息服務(wù)中間件進階

模塊一 開源消息中間件RabbitMQ

本模塊對市場上常用的開源消息中間件RabbitMQ進行深度源碼剖析、并對ACK、限流、TTL、死信、延遲、集群等高級應(yīng)用和原理進行講解。

作業(yè)內(nèi)容

基于RabbitMQ的TTL以及死信隊列,使用SpringBoot實現(xiàn)延遲付款,手動補償操作。

  1. 用戶下單后展示等待付款頁面

  2. 在頁面上點擊付款的按鈕,如果不超時,則跳轉(zhuǎn)到付款成功頁面

  3. 如果超時,則跳轉(zhuǎn)到用戶歷史賬單中查看因付款超時而取消的訂單

課程目錄及觀看建議

2倍速模式
課程3小時
作業(yè)3小時
*** 必看
** 建議看
* 可不看

  • 任務(wù)一:消息中間件概述
  1. 【課程資料】課程資料
  2. 課程介紹(時長:06:21)
  3. 分布式架構(gòu)通信(時長:28:40)
  4. 自定義消息中間件(時長:18:32)
  5. 主流消息中心間及選型(時長:32:26)
  6. 消息中間件應(yīng)用場景1-秒殺案例(時長:12:48)
  7. 消息中間件應(yīng)用場景2-拉勾案例(時長:08:36)
  8. JMS經(jīng)典模式詳解1(時長:18:48)
  9. JMS經(jīng)典模式詳解2(時長:20:34)
  10. AMQP協(xié)議剖析(時長:26:25)*
  • 任務(wù)二:RabbitMQ架構(gòu)與實戰(zhàn)
  1. RabbitMQ邏輯架構(gòu)(時長:09:47)**
  2. RabbitMQ Exchange類型(時長:16:15)**
  3. RabbitMQ的數(shù)據(jù)存儲(時長:35:35)
  4. 安裝配置RabbitMQ(時長:21:16)***
  5. RabbitMQ常用命令1(時長:24:16)
  6. RabbitMQ常用命令2(時長:32:53)
  7. RabbitMQ實戰(zhàn)案例(時長:43:40)
  8. Connection與Channel的關(guān)系1(時長:10:49)
  9. Connection與Channel的關(guān)系2(時長:32:07)
  10. RabbitMQ工作隊列模式(時長:15:35)**
  11. RabbitMQ發(fā)布訂閱模式1(時長:33:07)**
  12. RabbitMQ發(fā)布訂閱模式2(時長:10:03)**
  13. RabbitMQ路由模式(時長:22:42)**
  14. RabbitMQ主題模式(時長:30:25)***
  15. Spring整合RabbitMQ(時長:46:43)
  16. Spring注解整合RabbitMQ(時長:46:37)
  17. Spring注解整合RabbitMQ Listener(時長:21:35)
  18. SpringBoot整合RabbitMQ(時長:23:47)***
  • 任務(wù)三:RabbitMQ高級特性解析
  1. 消息可靠性1(時長:36:51)
  2. 消息可靠性2(時長:27:47)
  3. 消息可靠性之持久化存儲機制(時長:16:08)
  4. 消息可靠性之消費端確認機制(時長:30:57)
  5. 消息可靠性之消費端限流機制(時長:26:08)
  6. 消息可靠性之消息可靠性保障(時長:11:22)
  7. 可靠性分析(時長:34:33)
  8. TTL機制解析(時長:32:56)***
  9. 死信隊列解析1(時長:19:48)***
  10. 死信隊列解析2(時長:05:18)***
  11. 延遲隊列解析(時長:44:00)
  • 任務(wù)四:RabbitMQ集群與運維

  • 任務(wù)五:RabbitMQ源碼剖析

作業(yè)說明

實現(xiàn)思路

購買頁面

支付頁面

成功支付頁面

超時訂單信息頁面

1. 在數(shù)據(jù)庫中創(chuàng)建業(yè)務(wù)相關(guān)表。

以購買拉勾課程為例,一個訂單只有一個課程,且電子虛擬商品忽略庫存處理和物流信息。

  • 課程表(course):課程id、課程名稱、課程簡介、課程價格、課程狀態(tài)、備注、刪除標識、創(chuàng)建時間、創(chuàng)建者、更新時間、更新者

  • 用戶表(user):用戶id、用戶名稱、電話、郵箱、用戶狀態(tài)、備注、刪除標識、創(chuàng)建時間、更新時間

  • 訂單表(order_info):訂單id、用戶id、課程id、課程價格、訂單價格(課程價格 - 優(yōu)惠價格)、訂單狀態(tài)、備注、刪除標識、創(chuàng)建時間/下單時間、更新時間、過期時間

  • 支付記錄表(pay_info):支付id、用戶id、訂單id、流水id、支付方式、支付金額、支付狀態(tài)、備注、創(chuàng)建時間/支付時間

本次作業(yè)只實現(xiàn)訂單表和支付記錄表,課程表和用戶表省略。

2. 使用Spring Boot提供restful接口,供前端頁面調(diào)用
  • 獲取課程信息:getCourseById(Integer courseId)

  • 下單:order( Long userId, Integer courseId)

  • 支付:pay(Long userId, Long orderId) 忽略通過打開第三方支付頁面進行支付流程,直接完成支付狀態(tài)

  • 獲取訂單信息:getOrderInfoById(Long orderId)

本次作業(yè)只實現(xiàn)下單、付款、獲取訂單信息,獲取課程信息省略。

3. 設(shè)計前端頁面
  • 課程信息頁面:用于顯示所售課程詳細信息的頁面,并提供購買按鈕,完成下單操作。

  • 支付頁面:用戶在課程購買頁面中點擊購買按鈕后直接跳到待付款頁面,此時后臺已生成待付款訂單。

  • 支付成功頁面:完成支付后,提示成功。

  • 歷史訂單信息頁面:支付訂單超時的場合,用來查看超時失效的訂單信息。

因時間緊張,本次作業(yè)實現(xiàn)頁面比較簡陋。

軟件版本

RabbitMQ 3.8.5
Erlang 23.0.2
MySQL 5.7
Spring Boot 2.2.8
  spring-boot-starter-web
mybatis-spring-boot-starter 2.1.3

實現(xiàn)步驟

  1. 安裝RabbitMQ(可參看課程內(nèi)容及課程講義)
  • 安裝socat依賴
  • 安裝Erlang
  • 安裝RabbitMQ
  • 啟用RabbitMQ的管理插件
  • 開啟RabbitMQ
  • 添加用戶、標簽和權(quán)限
  1. 設(shè)計數(shù)據(jù)庫表結(jié)構(gòu)

  2. 搭建Spring Boot項目

建議首先按照課程視頻和講義搭建一個最簡單的RabbitMQ工程,啟動并實現(xiàn)消息的發(fā)送和接收。(參看課程任務(wù)二:18. SpringBoot整合RabbitMQ、講義1.7 SpringBoot整合RabbitMQ)

然后再根據(jù)作業(yè)要求修改和添加相應(yīng)代碼。

步驟如下:

  • 配置文件application.yml中設(shè)置mysql數(shù)據(jù)庫和rabbitmq鏈接地址
  • RabbitConfig.java中定義交換器和隊列。包括延遲和死信,設(shè)置好延遲時間
  • OrderController.java對外提供生產(chǎn)者的restful接口
  • OrderService.java實現(xiàn)下單業(yè)務(wù)處理。下單時發(fā)送消息到延遲隊列,并使用@RabbitListener實現(xiàn)死信隊列的監(jiān)聽處理,修改超時訂單的數(shù)據(jù)庫狀態(tài)
  • PayController.java對外提供消費者的restful接口(可以考慮新建另外的項目,獨立部署)
  • PayService.java實現(xiàn)支付業(yè)務(wù)處理。支付時判斷訂單狀態(tài),返回相應(yīng)結(jié)果
  • XxxMapper.javaXxxMapper.xml實現(xiàn)數(shù)據(jù)庫操作
  • 編寫下單和支付的html頁面(可以參看我的速推前端頁面介紹)

測試流程

  1. 用戶下單后展示等待付款頁面。確認訂單是否生成,TTL隊列中是否有消息。
  2. 在頁面上點擊付款的按鈕,如果不超時(10秒內(nèi)),則跳轉(zhuǎn)到付款成功頁面。確認訂單狀態(tài)。
  3. 重新下單,超時支付,則跳轉(zhuǎn)到用戶歷史賬單中查看因付款超時而取消的訂單。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容