若依微服務版(ruoyi-cloud)使用記錄
記錄一下使用ruoyi-cloud過程中遇到的問題
開發工具 Intellij Idea Community、Visual Studio Code
Idea 建議安裝外掛:Free Mybatis plugin,這樣可以從 mapper 介面直接跳轉到對應的 mapper.xml 檔案
vscode 建議安裝外掛:Vetur、vscode-element-helper、ESLint
更新時間: 2020-08-08 12:10
目錄
Redis 只能 localhost 訪問,本機 IP 訪問報錯
1.啟動
按照官網的步驟,
- 匯入專案,建立資料庫和表,啟動nacos。接下來修改nacos=》配置管理=》配置列表,把裡面用到資料庫連線的地方全部換成自己的資料庫,並修改使用者名稱和密碼,包括:ruoyi-system-dev.yml、ruoyi-auth-dev.yml、ruoyi-gen-dev.yml、ruoyi-job-dev.yml
- 下載、安裝、啟動Redis(注意,2020-07-22的時候官網文件沒寫這一步,但是必須要啟動redis),將nacos配置列表所有用到Redis的地方換成自己的連結,包括:ruoyi-gateway-dev.yml、ruoyi-auth-dev.yml、ruoyi-system-dev.yml
- 啟動前端。我遇到了某個包下載不下來的情況(ejs),解決辦法是單獨安裝一下那個包,或者複製一個放到 node_modules 下也行。node 版本最好不要太低,我用的12.16.3
補充:vscode 開啟 ruoyi-ui後,左側目錄會出現 NPM指令碼,點選 dev 右側的小三角就能啟動前端了,簡單省事。如下圖:
2.程式碼生成
使用程式碼生成的時候,資料庫表一定要配置主鍵,不然可能會遇到一些一眼看過去很奇妙的問題,我遇到的是新增和修改呼叫的是同一個介面,表現出來就是有一個功能異常。後期熟悉了很容易找見問題,但剛接觸的時候確實摸不著頭腦。
3.協同開發一個模組
多個人協同開發同一個模組的情況多少會遇到。如果不做修改的話,在 nacos 上看到的是一個服務有多個例項,nacos 會根據配置的權重自動做均衡。這種情況下除錯就會變得很麻煩。我沒采用的解決辦法是:假設開發ruoyi-house 模組
- 修改 resources 目錄下的 bootstrap.yml檔案中定義的應用名稱,比如改成:ruoyi-house-m1
- nacos 上克隆一份原配置,修改名稱,這裡的情況就是改成 ruoyi-house-m1-dev.yml
- 修改 ruoyi-ui 下的 vue.config.js 的 proxy,將要開發模組的請求全部對映到本地,不走閘道器。這樣別人訪問不到自己的服務,不用擔心除錯的時候誤入。但是自己可以訪問其他模組,不影響自己的開發。參考配置如下:
proxy: {
// detail: https://cli.vuejs.org/config/#devserver-proxy
[process.env.VUE_APP_BASE_API + '/house']: {
target: `http://localhost:9204`,
changeOrigin: true,
pathRewrite: {
['^' + process.env.VUE_APP_BASE_API + '/house']: ''
}
},
[process.env.VUE_APP_BASE_API]: {
target: `http://localhost:8080`,
changeOrigin: true,
pathRewrite: {
['^' + process.env.VUE_APP_BASE_API]: ''
}
}
}
因為是從上到下順序匹配的,所以順序一定不能變。同樣的也可以實現同一模組的某個介面繼續走閘道器,剩下的走本地,如下
proxy: {
// detail: https://cli.vuejs.org/config/#devserver-proxy
[process.env.VUE_APP_BASE_API + '/house/bedroom']: {
target: `http://localhost:8080`,
changeOrigin: true,
pathRewrite: {
['^' + process.env.VUE_APP_BASE_API]: ''
}
},
[process.env.VUE_APP_BASE_API + '/house']: {
target: `http://localhost:9204`,
changeOrigin: true,
pathRewrite: {
['^' + process.env.VUE_APP_BASE_API + '/house']: ''
}
},
[process.env.VUE_APP_BASE_API]: {
target: `http://localhost:8080`,
changeOrigin: true,
pathRewrite: {
['^' + process.env.VUE_APP_BASE_API]: ''
}
}
}
4.新建模組
新增以com.ruoyi開頭的模組
在 ruoyi-modules 上右鍵,new=》module,Parent 選擇 ruoyi-modules,name 以 ruoyi-my 為例。如下圖:
接下來修改 ruoyi-my 的 pom 檔案,直接複製 ruoyi-system 的 dependencies 節點和 build 節點。建立包結構,建立啟動類(複製 system 模組的啟動類修改名稱),建立 bootstrap.yml(同樣複製 system 模組,修改埠和服務名稱)。如下圖:
接下來登陸 nacos,克隆 ruoyi-system-dev.yml ,命名為 ruoyi-my-dev.yml,修改 mybatis.typeAliasesPackage,改為 com.ruoyi.my,釋出。如下圖:
然後修改 ruoyi-gateway-dev.yml,新增新增的模組,釋出。如下圖:
關於上圖中出現的 myService 的說明:myService 是和 api 中的 url 關聯的。api如下:
// 查詢測試用列表
export function listTest(query) {
return request({
url: '/myService/test/list',
method: 'get',
params: query
})
}
啟動新模組後就可以訪問了。
新增不以 com.ruoyi 開頭的模組
在“新增 com.ruoyi 開頭的模組”的基礎上做以下修改:以 com.mypkg.my 為例
- 修改 nacos 上對應配置檔案,修改 mybatis.typeAliasesPackage 為 com.mypkg.my
- 新建 annotation 包,將 ruoyi-common 模組下 ruoyi-common-security子模組下的com.ruoyi.common.security.annotation.EnableCustomConfig.java 類複製過來,修改 @MapperScan 的值為 com.mypkg.**.mapper。接著將啟動類上的 @EnableCustomConfig 註解改引用 annotation 包下的 EnableCustomConfig。如下圖:
啟動專案即可。
5.將模組抽取為單獨的專案
首先,執行 mvn install 命令,將 ruoyi 的包安裝到本地倉庫,因為之後會用到這些包。直接在 idea 裡執行就可以。如下圖:
以“新增不以 com.ruoyi 開頭的模組” 為例。先將 ruoyi-my 資料夾複製到一個新的目錄,然後用 idea開啟。然後修改 pom.xml 檔案,修改 parent 節點,指向 ruoyi。如下:
執行啟動類,結束。
如果是以“新增以 com.ruoyi開頭的模組” 為基礎,那麼需要新增“新增不以 com.ruoyi 開頭的模組”的第2步,遷移 EnableCustomConfig 類。
6.服務介面的定義和服務間呼叫
以“新增不以 com.ruoyi 開頭的模組” 為例。在原專案裡建兩個模組:my-client 和 my-server 。my-clinet 裡編寫對外提供的遠端呼叫介面。將原來的邏輯遷移進 my-server 。遷移的時候要修改兩個地方:主 pom 的 build 節點和 my-server pom 的 build 節點。將原主 pom 的build 節點遷移至 my-server 的pom裡。主pom改用 maven-compiler-plugin 。另外,建議指定3個pom的 groupId 、artifactId、version,這樣別的模組引用的時候不會混亂。如下:
// 主pom
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>${java.version}</source>
<target>${java.version}</target>
<encoding>${project.build.sourceEncoding}</encoding>
</configuration>
<version>${maven-compiler-plugin.version}</version>
</plugin>
</plugins>
</build>
my-client 的建立參照 ruoyi-api 即可。有一點需要注意,新建的 fallbackFactory 介面要在 resource.META-INF.spring.factories 裡註冊,如下圖:
重複“新增不以 com.ruoyi 開頭的模組” ,新建一個專案 ruoyi-my2,ruoyi-my2 呼叫 ruoyi-my 建立的服務。
首先 mvn install ruoyi-my 專案。ruoyi-my2 的 pom 檔案中新增 ruoyi-my 專案的 my-client 的引用,不需要整個引用 ruoyi-my。然後在 annotation 包中新建介面 EnableRyFeignClients,修改啟動類對 EnableRyFeignClients 的引用,改引用自定義的 EnableRyFeignClients。接著修改 EnableRyFeignClients 的 basePackages。因為 OpenFeign 預設只掃描啟動類所在目錄及子目錄,所以預設掃不到其他包裡定義的遠端呼叫介面。EnableRyFeignClients 內容如下:
import java.lang.annotation.*;
/**
* 自定義feign註解
* 新增basePackages路徑
*
* @author ruoyi
*/
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@EnableFeignClients
public @interface EnableRyFeignClients
{
String[] value() default {};
String[] basePackages() default { "com.ruoyi", "com.mypkg" };
Class<?>[] basePackageClasses() default {};
Class<?>[] defaultConfiguration() default {};
Class<?>[] clients() default {};
}
ruoyi-my2 的 pom 檔案中新增對 my-client 的引用:
<dependency>
<groupId>com.mypkg</groupId>
<artifactId>my-client</artifactId>
<version>1.0.0</version>
</dependency>
然後就可以呼叫 RemoteMyService 服務了。
7.部署執行
-
jar 包執行
打包後直接 java -jar ***.jar 會報異常:
2020-08-01 22:04:19.429 ERROR 15556 --- [ main] c.a.c.n.c.NacosPropertySourceBuilder : parse data from Nacos error,dataId:application-dev.yml,data:#請求處理的超時時間
......
org.yaml.snakeyaml.error.YAMLException: java.nio.charset.MalformedInputException: Input length = 1
參考文章NACOS MalformedInputException 無法讀取中文配置問題,解決辦法是執行時指定編碼格式:
java -D'file.encoding=utf-8' -jar .\ruoyi-auth-2.0.0.jar
-
Redis 只能 localhost 訪問,本機 IP 訪問報錯
報錯內容:io.lettuce.core.RedisException: java.io.IOException: 遠端主機強迫關閉了一個現有的連線。
參考redis本機能訪問 遠端不能訪問的問題,解決辦法:
- 給 Redis 新增密碼
- 註釋掉 bind 127.0.0.1
-
docker 執行 nacos
開發環境下 nacos 使用單機版。配置參考了docker內搭建單機模式的nacos,但是原文章寫的比較早,引數已經發生了變化,所以以下文為準(2020-08-02版)。建議直接參考官方的引數說明:nacos-docker。
- 拉取映象
docker pull nacos/nacos-server
- 啟動映象
docker run --env-file=env.list --name nacos -d -p 8848:8848 nacos/nacos-server
env.list 內容
MODE=standalone SPRING_DATASOURCE_PLATFORM=mysql MYSQL_SERVICE_DB_NAME=ry-config MYSQL_SERVICE_HOST=192.168.1.109 MYSQL_SERVICE_USER=root MYSQL_SERVICE_PASSWORD=root
如果使用的虛擬機器(我用的vmware),則需要將主機的 8848 埠對映到虛擬機器的 8848 埠,這樣其他電腦才能訪問到 docker 裡的 nacos。步驟是:編輯=》虛擬網路編輯器=》更改設定=》NAT設定=》新增,
-
docker 執行 ruoyi 模組
執行閘道器模組,發現沒有註冊到nacos。執行命令: docker logs 容器id,發現報錯: java.net.NoRouteToHostException: No route to host (Host unreachable)。解決辦法:防火牆開放相應埠。
-
開發環境 docker 部署注意事項
預設情況下,docker 內部網路和外部是隔離的。啟動的時候講宿主機的 8080 埠對映到 docker 內閘道器模組的 8080 埠,這樣外部通過閘道器訪問容器內的服務沒有問題,內部服務間的呼叫也沒有問題。但是我本地訪問 docker 內部的服務的時候就訪問不到了,因為 docker 內服務的 IP 都是172.*。我遇到的報錯提示是:請求 auth 時超時。解決辦法是修改docker的網路為 host,這樣服務會共用宿主機的 IP ,訪問就正常了。docker 的四種網路模式的區別可以參看:Docker四種網路模式。
相關文章
- 若依微服務專案整合人大金倉記錄微服務
- window系統使用Tomcat部署若依微服務Tomcat微服務
- 【微服務】docker使用記錄微服務Docker
- 若依dockerDocker
- 若依如何修改logoGo
- 微服務體系操作日誌如何記錄?微服務
- 【微服務目錄】.NET Core 微服務介紹微服務
- 若依管理系統新增redisRedis
- 【Java】若依(ruoyi)——4.部署Java
- 若依管理系統前端實踐前端
- 若依管理系統視訊教程
- spring cloud 微服務異常記錄與報警SpringCloud微服務
- ruoyi-cloudCloud
- 【Java】若依(ruoyi)——3.專案啟動(前後端分離版)Java後端
- 記一次攻防演練中的若依(thymeleaf 模板注入)getshell
- 01【若依框架】 登入許可權框架
- 若依 RuoYi4.6.0 程式碼審計
- 若依部署到伺服器之後修改頭像無法展示(分離版)伺服器
- go-kit微服務系列目錄Go微服務
- 學習筆記 - 微服務筆記微服務
- 微服務session落坑記微服務Session
- ABP微服務系列學習-使用Tye啟動微服務微服務
- Asp.net core依賴注入服務生存期踩坑記錄ASP.NET依賴注入
- 若依框架——>三級聯動 新增,預設修改框架
- 若依管理系統-免驗證介面實現
- 最受歡迎的微服務語錄:不要試圖跨微服務構建分散式事務微服務分散式
- 微服務下 Spring Boot Maven 工程依賴關係管理微服務Spring BootMaven
- 小墨學習記--微服務微服務
- 使用jhipster搭建微服務微服務
- 若依解決VUE前端時間顯示問題Vue前端
- springcloud微服務實戰 學習筆記五 Hystrix服務降級 Hystrix依賴隔離 斷路器SpringGCCloud微服務筆記
- Java微服務開發指南 -- 使用Spring Boot構建微服務Java微服務Spring Boot
- spring微服務實戰(二):使用Spring Boot建立微服務微服務Spring Boot
- 牌類遊戲使用微服務重構筆記(四): micro框架使用經驗遊戲微服務筆記框架
- 如何解決微服務之間的資料依賴問題?微服務
- Spring Cloud構建微服務架構-Hystrix依賴隔離SpringCloud微服務架構
- 【Java】若依(ruoyi)——7.程式碼生成(二)細節操作Java
- 為什麼要使用微服務微服務