學成在線,全部流程圖

前後端請求響應流程

在這裏插入圖片描述
1、在瀏覽器輸入前端url
2、前端框架vue.js根據url解析路由,根據路由找到page_list.vue頁面
3、首先執行page_list.vue中的鉤子方法
4、在鉤子方法中調用query方法。
5、在query方法中調用cms.js中的page_list方法
6、cms.js中的page_list方法通過axios請求服務端接口
7、採用proxyTable解決跨域問題,由node.js將請求轉發到服務端(http://localhost:31001/cms/page/list)
8、服務端處理,將查詢結果響應給前端
9、成功響應調用then方法,在then方法中處理響應結果,將查詢結果賦值給數據模型中的total和list變量。
10、vue.js通過雙向數據綁定將list數據渲染輸出。

異常處理流程

1、自定義異常類型。
2、自定義錯誤代碼及錯誤信息。
3、對於可預知的異常由程序員在代碼中主動拋出,由SpringMVC統一捕獲。
4、對於不可預知的異常(運行時異常)由SpringMVC統一捕獲Exception類型的異常。
5、可預知的異常及不可預知的運行時異常最終會採用統一的信息格式(錯誤代碼+錯誤信息)來表示,最終也會隨請求響應給客戶端

異常拋出及處理流程:
在這裏插入圖片描述
1、在controller、service、dao中程序員拋出自定義異常;springMVC框架拋出框架異常類型
2、統一由異常捕獲類捕獲異常,並進行處理
3、捕獲到自定義異常則直接取出錯誤代碼及錯誤信息,響應給用戶。
4、捕獲到非自定義異常類型首先從Map中找該異常類型是否對應具體的錯誤代碼,如果有則取出錯誤代碼和錯誤信息並響應給用戶,如果從Map中找不到異常類型所對應的錯誤代碼則統一爲99999錯誤代碼並響應給用戶。
5、將錯誤代碼及錯誤信息以Json格式響應給用戶。

頁面靜態化流程

在這裏插入圖片描述
1、靜態化程序首先讀取頁面獲取DataUrl。
2、靜態化程序遠程請求DataUrl得到數據模型。
3、獲取頁面模板。
4、執行頁面靜態化。

頁面預覽的流程

在這裏插入圖片描述
1、用戶進入cms前端,點擊“頁面預覽”在瀏覽器請求cms頁面預覽鏈接。
2、cms根據頁面id查詢DataUrl並遠程請求DataUrl獲取數據模型。
3、cms根據頁面id查詢頁面模板內容
4、cms執行頁面靜態化。
5、cms將靜態化內容響應給瀏覽器。
6、在瀏覽器展示頁面內容,實現頁面預覽的功能。

頁面發佈流程

在這裏插入圖片描述
1、管理員進入管理界面點擊“頁面發佈”,前端請求cms頁面發佈接口。
2、cms頁面發佈接口執行頁面靜態化,並將靜態化頁面(html文件)存儲至GridFS中。
3、靜態化成功後,向消息隊列發送頁面發佈的消息。
4、消息隊列負責將消息發送給各各服務器上部署的Cms Client(Cms客戶端)。
5、每個接收到頁面發佈消息的Cms Client從GridFS獲取Html頁面文件,並將Html文件存儲在本地服務器。

在這裏插入圖片描述
每個站點服務部署cms client程序,並與交換機綁定,綁定時指定站點Id爲routingKey
(指定站點id爲routingKey就可以實現cms client只能接收到所屬站點的頁面發佈消息。)

在這裏插入圖片描述
1、前端請求cms執行頁面發佈。
2、cms執行靜態化程序生成html文件。
3、cms將html文件存儲到GridFS中。
4、cms向MQ發送頁面發佈消息
5、MQ將頁面發佈消息通知給Cms Client
6、Cms Client從GridFS中下載html文件
7、Cms Client將html保存到所在服務器指定目錄

頁面發佈消費方

1、將cms Client部署在服務器(基礎工程),配置隊列名稱和站點ID。
2、cms Client連接RabbitMQ並監聽各自的“頁面發佈隊列”
3、cms Client接收頁面發佈隊列的消息
4、根據消息中的頁面id從mongodb數據庫下載頁面到本地

頁面發佈生產方

1、管理員進入管理界面點擊“頁面發佈”,前端請求cms頁面發佈接口。
2、cms頁面發佈接口執行頁面靜態化,並將靜態化頁面存儲至GridFS中。
3、靜態化成功後,向消息隊列發送頁面發佈的消息。

文件上傳流程

在這裏插入圖片描述

文件下載流程

在這裏插入圖片描述
上傳圖片流程

在這裏插入圖片描述
課程管理中上傳圖片處理流程

在這裏插入圖片描述
執行流程如下:
1、管理員進入教學管理前端,點擊上傳圖片
2、圖片上傳至文件系統服務,文件系統請求fastDFS上傳文件
3、文件系統將文件入庫,存儲到文件系統服務數據庫中。
4、文件系統服務向前端返回文件上傳結果,如果成功則包括文件的Url路徑。
5、課程管理前端請求課程管理進行保存課程圖片信息到課程數據庫。
6、課程管理服務將課程圖片保存在課程數據庫。

高可用環境

在這裏插入圖片描述
1、在實際使用時Eureka Server至少部署兩臺服務器,實現高可用。
2、兩臺Eureka Server互相註冊。
3、微服務需要連接兩臺Eureka Server註冊,當其中一臺Eureka死掉也不會影響服務的註冊與發現。
4、微服務會定時向Eureka server發送心跳,報告自己的狀態。
5、微服務從註冊中心獲取服務地址以RESTful方式發起遠程調用。

Ribbon負載均衡的流程圖

在這裏插入圖片描述
1、在消費微服務中使用Ribbon實現負載均衡,Ribbon先從EurekaServer中獲取服務列表。
2、Ribbon根據負載均衡的算法去調用微服務。

課程預覽流程

在這裏插入圖片描述
1、用戶進入課程管理頁面,點擊課程預覽,請求到課程管理服務
2、課程管理服務遠程調用cms添加頁面接口向cms添加課程詳情頁面
3、課程管理服務得到cms返回課程詳情頁面id,並拼接生成課程預覽Url
4、課程管理服務將課程預覽Url給前端返回
5、用戶在前端頁面請求課程預覽Url,打開新窗口顯示課程詳情內容

課程發佈流程

在這裏插入圖片描述
1、用戶進入教學管理中心,進入某個課程的管理界面
2、點擊課程發佈,前端請求到課程管理服務
3、課程管理服務遠程調用CMS生成課程發佈頁面,CMS將課程詳情頁面發佈到服務器
4、課程管理服務修改課程發佈狀態爲 “已發佈”,並向前端返回發佈成功
5、用戶在教學管理中心點擊“課程詳情頁面”鏈接,查看課程詳情頁面內容

es在項目中的應用流程

在這裏插入圖片描述
1)用戶在前端搜索關鍵字
2)項目前端通過http方式請求項目服務端
3)項目服務端通過Http RESTful方式請求ES集羣進行搜索
4)ES集羣從索引庫檢索數據。

搜索流程

在這裏插入圖片描述
1、課程管理服務將數據寫到MySQL數據庫
2、使用Logstash將MySQL數據庫中的數據寫到ES的索引庫。
3、用戶在前端搜索課程信息,請求到搜索服務。
4、搜索服務請求ES搜索課程信息。

從客戶端請求到Nuxt.js進行服務端渲染的整體的工作流程

在這裏插入圖片描述
1、用戶打開瀏覽器,輸入網址請求到Node.js
2、部署在Node.js的應用Nuxt.js接收瀏覽器請求,並請求服務端獲取數據
3、Nuxt.js獲取到數據後進行服務端渲染
4、Nuxt.js將html網頁響應給瀏覽器

媒資系統與其它系統的交互情況

在這裏插入圖片描述
1、上傳媒資文件
前端/客戶端請求媒資系統上傳文件。
文件上傳成功將文件存儲到媒資服務器,將文件信息存儲到數據庫。
2、使用媒資
課程管理請求媒資系統查詢媒資信息,將課程計劃與媒資信息對應、存儲。
3、視頻播放
用戶進入學習中心請求學習服務學習在線播放視頻。
學習服務校驗用戶資格通過後請求媒資系統獲取視頻地址。

使用WebUploader上傳視頻流程

在這裏插入圖片描述

視頻處理流程

在這裏插入圖片描述
1、監聽MQ,接收視頻處理消息。
2、進行視頻處理。
3、向數據庫寫入視頻處理結果。

學習頁面獲取視頻播放地址

在這裏插入圖片描述
1、用戶進入在線學習頁面,頁面請求搜索服務獲取課程信息(包括課程計劃信息)並且在頁面展示。
2、在線學習請求學習服務獲取視頻播放地址。
3、學習服務校驗當前用戶是否有權限學習,如果沒有權限學習則提示用戶。
4、學習服務校驗通過,請求搜索服務獲取課程媒資信息。
5、搜索服務請求ElasticSearch獲取課程媒資信息。

用戶認證流程

在這裏插入圖片描述
1、客戶端請求認證服務進行認證。
2、認證服務認證通過向瀏覽器cookie寫入token(身份令牌)
認證服務請求用戶中心查詢用戶信息。
認證服務請求Spring Security申請令牌。
認證服務將token(身份令牌)和jwt令牌存儲至redis中。
認證服務向cookie寫入 token(身份令牌)。
3、前端攜帶token請求認證服務獲取jwt令牌
前端獲取到jwt令牌並存儲在sessionStorage。
前端從jwt令牌中解析中用戶信息並顯示在頁面。
4、前端攜帶cookie中的token身份令牌及jwt令牌訪問資源服務
前端請求資源服務需要攜帶兩個token,一個是cookie中的身份令牌,一個是http header中的jwt令牌
前端請求資源服務前在http header上添加jwt請求資源
5、網關校驗token的合法性
用戶請求必須攜帶token身份令牌和jwt令牌
網關校驗redis中token是否合法,已過期則要求用戶重新登錄
6、資源服務校驗jwt的合法性並完成授權
資源服務校驗jwt令牌,完成授權,擁有權限的方法正常執行,沒有權限的方法將拒絕訪問。

認證服務查詢數據庫

在這裏插入圖片描述
完整的流程圖如下:
在這裏插入圖片描述

解析申請令牌錯誤信息

在這裏插入圖片描述
用戶登錄成功在頁頭顯示當前登錄的用戶名稱

在這裏插入圖片描述
1、用戶請求認證服務,登錄成功。
2、用戶登錄成功,認證服務向cookie寫入身份令牌,向redis寫入user_token(身份令牌及授權jwt授權令牌)
3、客戶端攜帶cookie中的身份令牌請求認證服務獲取jwt令牌。
4、客戶端解析jwt令牌,並將解析的用戶信息存儲到sessionStorage中。
jwt令牌中包括了用戶的基本信息,客戶端解析jwt令牌即可獲取用戶信息。
5、客戶端從sessionStorage中讀取用戶信息,並在頁頭顯示。

Zuul與Nginx怎麼配合使用?

在這裏插入圖片描述
用戶授權業務流程

在這裏插入圖片描述
1、用戶認證通過,認證服務向瀏覽器cookie寫入token( 身份令牌)
2、前端攜帶token請求用戶中心服務獲取jwt令牌
前端獲取到jwt令牌解析,並存儲在sessionStorage
3、前端攜帶cookie中的身份令牌及jwt令牌訪問資源服務
前端請求資源服務需要攜帶兩個token,一個是cookie中的身份令牌,一個是http header中的jwt前端請求資源服務前在http header上添加jwt請求資源
4、網關校驗token的合法性
用戶請求必須攜帶身份令牌和jwt令牌
網關校驗redis中user_token的有效期,已過期則要求用戶重新登錄
5、資源服務校驗jwt的合法性並進行授權
資源服務校驗jwt令牌,完成授權,擁有權限的方法正常執行,沒有權限的方法將拒絕訪問。

用戶買課程提交訂單及支付流程

在這裏插入圖片描述
1、用戶提交訂單需要先登錄系統
2、提交訂單,訂單信息保存到訂單數據庫
3、訂單支付,調用微信支付接口完成支付
4、完成支付,微信支付系統通知學成在線支付結果
5、學成在線接收到支付結果通知,更新支付結果

將分佈式事務拆分成多個本地事務來完成,並且由消息隊列異步協調完成

下邊以下單減少庫存爲例來說明:
在這裏插入圖片描述
1、訂單服務和庫存服務完成檢查和預留資源。
2、訂單服務在本地事務中完成添加訂單表記錄和添加“減少庫存任務消息”。
3、由定時任務根據消息表的記錄發送給MQ通知庫存服務執行減庫存操作。
4、庫存服務執行減少庫存,並且記錄執行消息狀態(爲避免重複執行消息,在執行減庫存之前查詢是否執行過此
消息)。
5、庫存服務向MQ發送完成減少庫存的消息。
6、訂單服務接收到完成庫存減少的消息後刪除原來添加的“減少庫存任務消息”。
實現最終事務一致要求:預留資源成功理論上要求正式執行成功,如果執行失敗會進行重試,要求業務執行方法實
現冪等。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章