Ruoyi-cloud 項目學習
- 一、項目環境搭建與啟動
- 1.1 nacos安裝部署
- 1.1.1 nacos安裝、啟動
- 1.1.2 nacos部署
- 1.2 seata安裝部署
- 1.3 后端部署與運行
- 1.3.1 ruoyi-modules-file模塊運行報錯
- 1.4 nginx安裝、部署、配置與啟動
- 1.5 redis安裝與部署
- 1.6 前段框架知識
- 1.7 項目啟動
- 1.8 參考
- 二、技術選型與框架理解
- 2.1 技術選型
- 2.2 框架理解
- 2.2.1 Spring Boot框架
- 2.2.2 Spring Cloud框架
- 2.2.2.1 服務注冊與發現
- 2.2.2.2 配置中心
- 2.2.2.3 服務網關
- 2.2.2.4 智能路由
- 2.2.2.5 負載均衡
- 2.2.2.6 斷路器
- 2.2.2.7 監控跟蹤
- 2.2.2.8 分布式消息隊列
一、項目環境搭建與啟動
參考視頻或文章鏈接 |
---|
RuoYi-Cloud官方文檔 |
《若依框架講解-微服務版》- bilibili |
How To Install DBeaver Universal Database Tool in Linux |
請參考官方文檔進行環境搭建,這里只記錄遇到的零散問題。
1.1 nacos安裝部署
1.1.1 nacos安裝、啟動
安裝nacos,并使用bash startup.sh -m standalone
單機模式啟動后,訪問 http://127.0.0.1:8848/nacos/
,我發現沒有登錄界面即可登錄nacos,也就是說,沒有鑒權我就進入了nacos,原因是我目前使用的是nacos-2.3.0,“Nacos自2.2.2版本開始,在未開啟鑒權時,默認控制臺將不需要登錄即可訪問”,具體說明可見官方文檔,注意是中文文檔,有個規律,外國人開發的項目優先看英文文檔,中國人開發的項目優先看中文文檔,因為更新更及時,如果中國人開發的項目更新中文文檔都不及時,反倒更優先更新“程序員的第一母語——英語”,那就說明這項目壓根就不打算面向國內程序員。停止nacos的命令是sh shutdown.sh
。
1.1.2 nacos部署
nacos支持三種部署模式:
單機模式 - 用于測試和單機試用。
集群模式 - 用于生產環境,確保高可用。
多集群模式 - 用于多數據中心場景。
ruoyi項目默認使用單機模式
1.2 seata安裝部署
RuoYi可以集成seata分布式事務
1.3 后端部署與運行
工程文件的打包是用/bin/package.bat
文件完成的,但我使用的是Ubuntu
系統,所以要將內容轉換成shell
文件才能執行,網絡上有現成的執行轉換任務的工具,直接拿來用,也可以直接借助于大模型,轉換規則放在參考文章里了,但沒人愿意手敲,我用的是大模型,后面遇到了更好更直接的工具再放到文章里。
REM package.bat, bat文件中, 注釋符號為REM
@echo off REM 關閉命令回顯功能,在執行后續的命令時,不顯示命令本身。
echo. REM 輸出一個空行
echo [信息] 打包Web工程,生成war/jar包文件。
echo.%~d0 REM 獲取當前批處理文件所在目錄的驅動器號
cd %~dp0 REM 改變當前工作目錄到批處理文件所在目錄cd ..
call mvn clean package -Dmaven.test.skip=truepause
這是轉換后的package.sh
文件,執行后就會在各ruoyi-xxx
模塊下的/target
目錄,生成該模塊對應的jar
包
#!/bin/bash
#package.sh
echo "[信息] 打包Web工程,生成war/jar包文件。"
# $0 是 Bash shell 中的一個特殊變量,表示當前正在執行的shell腳本的名稱
# dirname 是一個 Bash shell 內置命令,用于返回指定文件或目錄的父目錄名稱。
cd "$(dirname "$0")" || exit
cd ..
mvn clean package -Dmaven.test.skip=true
啟動各個模塊前,先要啟動nacos,啟動方法請往上翻。
1.3.1 ruoyi-modules-file模塊運行報錯
Caused by: java.lang.IllegalArgumentException: Could not resolve placeholder 'fdfs.domain' in value "${fdfs.domain}"
,解決方法請看參考文章鏈接,配置nacos,所以并不是簡單的把nacos啟動了,就完事了。搜索fdfs
,看到,需要在nacos下建立一份ruoyi-file-dev.yml
,根據ry-config
數據庫下config_info
表的字段,data_id為ruoyi-file-dev.yml
,group_id為DEFAULT_GROUP
即可,
參考文章鏈接 |
---|
《分布式事務》- Ruoyi官方文檔 |
1.4 nginx安裝、部署、配置與啟動
1.5 redis安裝與部署
見參考文章
1.6 前段框架知識
npm:node.js的包管理工具,用于統一管理我們前端項目中需要用到的包、插件、工具、命令等,便于開發和維護。
ES6:Javascript的新版本,ECMAScript6的簡稱。利用ES6我們可以簡化我們的JS代碼,同時利用其提供的強大功能來快速實現JS邏輯。
vue-cli:Vue的腳手架工具,用于自動生成Vue項目的目錄及文件。
vue-router: Vue提供的前端路由工具,利用其我們實現頁面的路由控制,局部刷新及按需加載,構建單頁應用,實現前后端分離。
vuex:Vue提供的狀態管理工具,用于統一管理我們項目中各種數據的交互和重用,存儲我們需要用到數據對象。
element-ui:基于MVVM框架Vue開源出來的一套前端ui組件。
1.7 項目啟動
Spring-Cloud是一個微服務框架,什么是微服務(Microservices)?微服務由許多較小的,松散耦合的服務組成一個應用程序,與大型,緊密耦合的應用程序的整體方法相反。比如一個黨支部達到一定人數時,為方便活動,就會拆分成一支部,二支部,這樣分開活動更為方便,但整體仍同屬一個組織架構,天下最基本的道理其實就這么多,只是變化無窮。所以只需要將各個模塊的jar
包或war
包啟動即可,啟動腳本在項目的/bin
目錄下。
1.8 參考
參考文章 |
---|
《Nacos-v2 下載、安裝并使用》 |
《Nacos-v2 用戶指南-權限認證》 |
《Nacos-v2 部署手冊》 |
《Seata 是什么?》 |
Rules of Converting DOS Batch Files to Shell Scripts |
Nginx中文官網 |
《Redis 安裝》- 菜鳥教程 |
Microservices - Wikipedia |
二、技術選型與框架理解
2.1 技術選型
技術棧 | 選型 |
---|---|
系統環境 | Java EE 8 Servlet 3.0 Apache Maven 3 |
主框架 | Spring Boot 2.3.x Spring Cloud Hoxton.SR9 Spring Framework 5.2.x Spring Security 5.2.x |
持久層 | Apache MyBatis 3.5.x Hibernate Validation 6.0.x Alibaba Druid 1.2.x |
視圖層 | Vue 2.6.x Axios 0.21.0 Element 2.14.x |
2.2 框架理解
2.2.1 Spring Boot框架
參考文章 |
---|
Spring Boot - offical website |
2.2.2 Spring Cloud框架
Spring Cloud是一系列框架的有序集合。看到Spring Cloud與Spring Boot,一定要搞清楚這兩個框架到底有什么區別,面試的時候大概率肯定會問。
Question 1: Spring Cloud與Spring Boot這兩個框架到底有什么區別?
(1) Spring Boot 是 Spring的一套快速配置腳手架,可以基于Spring Boot 快速開發單個微服務;Spring Cloud是一個基于Spring Boot實現的云應用開發工具;
(2) Spring Boot專注于快速、方便集成的單個個體;Spring Cloud是關注全局的服務治理框架;
(3) Spring Boot使用了默認大于配置的理念,很多集成方案已經幫你選擇好了,能不配置就不配置;Spring Cloud很大的一部分是基于Spring Boot來實現。
(4) Spring Boot可以離開Spring Cloud獨立使用開發項目,但是SpringCloud離不開Spring Boot,屬于依賴的關系。
Question 2: Spring Cloud與Spring Cloud Alibaba這兩個框架到底又有什么區別?
搞懂了上面那個問題,這個問題又需要回應。我先說說我自己的理解,再把綜合了其它文章的答案貼到下面,我的理解是:“微服務可以理解為一套技術標準,你得滿足服務注冊與發現、配置中心、服務網關等特性,但不同廠家有不同的實現標準,官方的Spring Cloud有自己的一套組件去實現這些功能(可能是從開源社區拿過來用或其它組織貢獻的),國外的Netflix有它的Spring Cloud Netflix下的一系列組件,國內的阿里有Spring Cloud Alibaba下的一系列組件”。
(1) 組件來源: Spring Cloud是一套微服務解決方案,它集成了Netflix的組件如Eureka、Ribbon、Feign等,為開發者提供了一整套微服務開發工具和框架。而Spring Cloud Alibaba是Spring Cloud的擴展組件,它集成了阿里巴巴的一些開源組件,包括但不限于Nacos(一個更易于構建云原生應用的動態服務發現、配置管理和服務管理平臺),Sentinel(面向分布式服務架構的流量控制產品)和RocketMQ。
(2)功能特點: Spring Cloud Alibaba提供了一些阿里巴巴的開源組件,以便于開發者更方便地使用這些組件來開發分布式應用服務。例如,Spring Cloud Alibaba Nacos可以用于服務發現和配置管理,而Spring Cloud Alibaba Sentinel則可以提供流量控制、熔斷降級、系統負載保護等功能。
(3)關系: Spring Cloud Alibaba是阿里巴巴出品的Spring Cloud第二代實現標準,它是阿里巴巴公司對微服務的實踐總結出的,已經在業界廣泛使用。總的來說,Spring Cloud Alibaba是Spring Cloud的子項目,符合Spring Cloud的標準。
—— 來自星火大模型的回答
從這里可以看出阿里系的戰略布局,開發自己的一套技術架構并加入Spring生態,從而得到更大面積的推廣,讓更多的受眾群體離不開Spring Cloud Alibaba,成為阿里系產品的使用者,并發展成潛在的用戶,這一招戰略十分精妙,華為的戰略與之類似,華為也在推廣它自己的技術體系到主流生態中,PyTorch就有華為的貢獻。
參考文章 |
---|
Spring Cloud - offical website |
Spring Boot Vs Spring cloud |
《一篇文章搞懂 Spring Cloud 是什么》 |
《終于有阿里資深架構師講通Springcloud與Springboot的關系了》 |
哈嘍沃德先生 —— 博客主頁 |
《一文帶您讀懂什么是Spring Cloud與Spring Cloud Alibaba》- 知乎 |
《最詳細說明spring cloud和Spring Cloud Alibaba的聯系和區別》- CSDN |
【一張圖完整說明微服務基本概念和核心思想】 - bilibili |
2.2.2.1 服務注冊與發現
見《注冊中心 | RuoYi》
2.2.2.2 配置中心
配置文件加載的優先級(由高到低)bootstrap.properties ->bootstrap.yml -> application.properties -> application.yml
見《配置中心 | RuoYi》