文章內(nèi)容輸出來源:拉勾教育Java高薪訓練營
學習心得
課程介紹
第六階段 分布式消息服務中間件進階
模塊一 開源消息中間件RabbitMQ
本模塊對市場上常用的開源消息中間件RabbitMQ進行深度源碼剖析、并對ACK副编、限流傲宜、TTL、死信、延遲碱工、集群等高級應用和原理進行講解庵寞。
作業(yè)內(nèi)容
基于RabbitMQ的TTL以及死信隊列,使用SpringBoot實現(xiàn)延遲付款闪朱,手動補償操作月匣。
用戶下單后展示等待付款頁面
在頁面上點擊付款的按鈕,如果不超時奋姿,則跳轉(zhuǎn)到付款成功頁面
如果超時锄开,則跳轉(zhuǎn)到用戶歷史賬單中查看因付款超時而取消的訂單
課程目錄及觀看建議
2倍速模式
課程3小時
作業(yè)3小時
***
必看
**
建議看
*
可不看
- 任務一:消息中間件概述
- 【課程資料】課程資料
- 課程介紹(時長:06:21)
- 分布式架構(gòu)通信(時長:28:40)
- 自定義消息中間件(時長:18:32)
- 主流消息中心間及選型(時長:32:26)
- 消息中間件應用場景1-秒殺案例(時長:12:48)
- 消息中間件應用場景2-拉勾案例(時長:08:36)
- JMS經(jīng)典模式詳解1(時長:18:48)
- JMS經(jīng)典模式詳解2(時長:20:34)
- AMQP協(xié)議剖析(時長:26:25)
*
- 任務二:RabbitMQ架構(gòu)與實戰(zhàn)
- RabbitMQ邏輯架構(gòu)(時長:09:47)
**
- RabbitMQ Exchange類型(時長:16:15)
**
- RabbitMQ的數(shù)據(jù)存儲(時長:35:35)
- 安裝配置RabbitMQ(時長:21:16)
***
- RabbitMQ常用命令1(時長:24:16)
- RabbitMQ常用命令2(時長:32:53)
- RabbitMQ實戰(zhàn)案例(時長:43:40)
- Connection與Channel的關(guān)系1(時長:10:49)
- Connection與Channel的關(guān)系2(時長:32:07)
- RabbitMQ工作隊列模式(時長:15:35)
**
- RabbitMQ發(fā)布訂閱模式1(時長:33:07)
**
- RabbitMQ發(fā)布訂閱模式2(時長:10:03)
**
- RabbitMQ路由模式(時長:22:42)
**
- RabbitMQ主題模式(時長:30:25)
***
- Spring整合RabbitMQ(時長:46:43)
- Spring注解整合RabbitMQ(時長:46:37)
- Spring注解整合RabbitMQ Listener(時長:21:35)
- SpringBoot整合RabbitMQ(時長:23:47)
***
- 任務三:RabbitMQ高級特性解析
- 消息可靠性1(時長:36:51)
- 消息可靠性2(時長:27:47)
- 消息可靠性之持久化存儲機制(時長:16:08)
- 消息可靠性之消費端確認機制(時長:30:57)
- 消息可靠性之消費端限流機制(時長:26:08)
- 消息可靠性之消息可靠性保障(時長:11:22)
- 可靠性分析(時長:34:33)
- TTL機制解析(時長:32:56)
***
- 死信隊列解析1(時長:19:48)
***
- 死信隊列解析2(時長:05:18)
***
- 延遲隊列解析(時長:44:00)
任務四:RabbitMQ集群與運維
任務五:RabbitMQ源碼剖析
作業(yè)說明
實現(xiàn)思路
購買頁面
支付頁面
成功支付頁面
超時訂單信息頁面
1. 在數(shù)據(jù)庫中創(chuàng)建業(yè)務相關(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)步驟
- 安裝RabbitMQ(可參看課程內(nèi)容及課程講義)
- 安裝
socat
依賴 - 安裝Erlang
- 安裝RabbitMQ
- 啟用RabbitMQ的管理插件
- 開啟RabbitMQ
- 添加用戶、標簽和權(quán)限
設(shè)計數(shù)據(jù)庫表結(jié)構(gòu)
略搭建Spring Boot項目
建議首先按照課程視頻和講義搭建一個最簡單的RabbitMQ工程华望,啟動并實現(xiàn)消息的發(fā)送和接收蕊蝗。(參看課程任務二:18. SpringBoot整合RabbitMQ、講義1.7 SpringBoot整合RabbitMQ)
然后再根據(jù)作業(yè)要求修改和添加相應代碼赖舟。
步驟如下:
- 配置文件
application.yml
中設(shè)置mysql數(shù)據(jù)庫和rabbitmq鏈接地址 -
RabbitConfig.java
中定義交換器和隊列蓬戚。包括延遲和死信,設(shè)置好延遲時間 -
OrderController.java
對外提供生產(chǎn)者的restful接口 -
OrderService.java
實現(xiàn)下單業(yè)務處理宾抓。下單時發(fā)送消息到延遲隊列子漩,并使用@RabbitListener
實現(xiàn)死信隊列的監(jiān)聽處理,修改超時訂單的數(shù)據(jù)庫狀態(tài) -
PayController.java
對外提供消費者的restful接口(可以考慮新建另外的項目石洗,獨立部署) -
PayService.java
實現(xiàn)支付業(yè)務處理幢泼。支付時判斷訂單狀態(tài),返回相應結(jié)果 -
XxxMapper.java
和XxxMapper.xml
實現(xiàn)數(shù)據(jù)庫操作 - 編寫下單和支付的html頁面(可以參看我的速推前端頁面介紹)
測試流程
- 用戶下單后展示等待付款頁面劲腿。確認訂單是否生成旭绒,TTL隊列中是否有消息鸟妙。
- 在頁面上點擊付款的按鈕焦人,如果不超時(10秒內(nèi)),則跳轉(zhuǎn)到付款成功頁面重父。確認訂單狀態(tài)花椭。
- 重新下單,超時支付房午,則跳轉(zhuǎn)到用戶歷史賬單中查看因付款超時而取消的訂單矿辽。