springCloudGateway-使用記錄
一、需求描述
舊項目做好之後,已經維護了一兩個月,基本上已經趨於穩定,按照項目的整體進度基本上不會在做什麼改動。新項目已經確定
下來,只是有一個大概的需求,unity3d的客戶端已經開始做,在這個月23號之前會要求先出一個遊戲的版本。目前相對來說不是太忙,
自己就考慮著開始搭建新項目的框架,首先考慮的就是先搭建網關服務。之前的項目由於工期非常短,並且非常急就沒有把網關服務
給加進去,現在有時間了自己就想著第一個任務就是先添加網關服務,之後在根據需要在添加其他的服務。
二、需求分析
自己的一個了解,網關服務可以做很多事情,比如實現所有訪問請求的日誌採集;身份認證,是否已經登錄,是否有許可權登錄某個
系統;如果系統的訪問量比較大的話,還可以做負載均衡;還可以做路由轉發,根據不同的路由轉發到對應的服務。好處這麼多當然需要
使用一個網關服務來作為項目的統一入口,做各種事情。
三、技術選型
由於現在技術更新得特別快,比如springboot的版本一直在不斷地進行更新,支援時間也在不斷地壓縮。
參考了很多資料,最終自己採納選擇2.3.x的springboot版本,springcloud和springcloudalibaba的版本如下,
<!-- 依賴的jar包所對應的版本 -->
<properties>
<spring-cloud.version>Hoxton.SR9</spring-cloud.version>
<spring-cloud-alibaba.version>2.2.6.RELEASE</spring-cloud-alibaba.version>
<!--<spring-cloud-starter-alibaba-nacos-config.version>1.4.2</spring-cloud-starter-alibaba-nacos-config.version>-->
<!-- 編譯插件 mvn compile -->
<maven-compiler-plugin.source>1.8</maven-compiler-plugin.source>
<maven-compiler-plugin.target>1.8</maven-compiler-plugin.target>
<maven-compiler-plugin.encoding>UTF-8</maven-compiler-plugin.encoding>
<!-- 是否跳過單元測試 解決中文亂碼 -->
<maven-surefire-plugin.skipTests>true</maven-surefire-plugin.skipTests>
<maven-surefire-plugin.argLine>-Dfile.encoding=UTF-8</maven-surefire-plugin.argLine>
<mybatis-generator-maven-plugin.version>1.3.2</mybatis-generator-maven-plugin.version>
</properties>
<!-- 單個子項目特有的jar包 -->
<dependencyManagement>
<dependencies>
<!-- springcloud版本 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!-- springcloud alibaba 版本 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>${spring-cloud-alibaba.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
版本選定好之後就開始搭建項目。由於自己之前一直在使用springcloudalibaba的nacos組件,因此新搭建的項目中繼續使用這個組件。
主要用來做配置管理和服務發現。本篇博文需要有nacos使用基礎的人才能理解。
首先搭建gateway網關項目,java程式碼很簡單,就一個啟動類,導入的maven配置如下:<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
<!-- lombok 僅限編譯的時候使用 -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>RELEASE</version>
<scope>compile</scope>
</dependency>
<!-- nacos 配置管理 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<!-- nacos 服務發現 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
</dependencies>
nacos中的配置如下:

spring.application.name=motionSpaceGateway
spring.profiles.active=dev
#配置管理
spring.cloud.nacos.config.server-addr=127.0.0.1:24700
#spring.cloud.nacos.config.server-addr=192.168.1.2.5
#命名空間
spring.cloud.nacos.config.namespace=8760e76628114fceb7fc723b2da51c5c
#分組配置
spring.cloud.nacos.config.group=motionSpace
# 開啟動態刷新
spring.cloud.nacos.config.refresh.enabled=true
#讀取的配置文件後綴名
spring.cloud.nacos.config.file-extension=properties
#服務發現地址
spring.cloud.nacos.discovery.server-addr=127.0.0.1:24700
#spring.cloud.nacos.discovery.server-addr=192.168.1.2.5
由於剛開始搭建項目,只要請求能夠轉發即可,之後的一些功能會一步一步的進行添加。
做完這些工作後,啟動項目,如下圖
注意事項:springcloudgateway這個項目,不需要配置項目的根路徑,如上圖所示。它和其他springboot項目的啟動方式還不太一樣,其他
項目可以配置項目的根路徑,在項目啟動時也會添加進去。可是springcloudgateway 即使在配置中添加了項目根路徑,啟動時也不會載入。
上圖顯示的是Netty started on port,只需要配置一個埠即可。
之後是搭建一個後端主項目,導入的maven配置如下:
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- lombok 僅限編譯的時候使用 -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>RELEASE</version>
<scope>compile</scope>
</dependency>
<!-- nacos 配置管理 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<!-- nacos 服務發現 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
</dependencies>
配置更加簡單,一個埠和一個訪問路徑即可:
bootstrap.properties的配置如下:
spring.application.name=motionSpacebackend
spring.profiles.active=dev
#配置管理
spring.cloud.nacos.config.server-addr=127.0.0.1:24700
#spring.cloud.nacos.config.server-addr=192.168.1.2.5
#命名空間
spring.cloud.nacos.config.namespace=8760e76628114fceb7fc723b2da51c5c
#分組配置
spring.cloud.nacos.config.group=motionSpace
# 開啟動態刷新
spring.cloud.nacos.config.refresh.enabled=true
#讀取的配置文件後綴名
spring.cloud.nacos.config.file-extension=properties
#服務發現地址
spring.cloud.nacos.discovery.server-addr=127.0.0.1:24700
#spring.cloud.nacos.discovery.server-addr=192.168.1.2.5
然後添加一個測試類
@Slf4j
@RestController
@RequestMapping("/test")
public class TestController {
/**
* @description:
* @author: dengyilang
* @date: 2022/1/7 17:40
* @return: void
*/
@RequestMapping(value = "/rout", method = RequestMethod.GET)
public String scanBind(){
log.info("backend路由測試---");
return "路由測試";
}
}
項目啟動成功。
首先測試後端項目能否正常訪問,訪問的地址為 //localhost:17303/backend/test/rout
測試結果正常。
然後測試使用網關服務進行轉發是否正常,請求地址為 //localhost:51309/gateway/backend/test/rout
測試結果正確。
請求的大致過程為 首先請求地址 //localhost:51309/gateway/backend/test/rout 會到達 gateway項目的後台,
根據路由匹配規則,匹配到如下圖中的路由,並且會截取掉第一個前綴/gateway/變為 //localhost:51309/backend/test/rout
然後gateway項目將請求進行轉發到下圖的地址中,gateway項目在底層進行處理時,會將motionSpacebackend這個項目名稱解析為
對應的地址和埠,在本地就解析為127.0.0.1:17303
轉發後的請求就變為//127.0.0.1:17303/backend/test/rout 最終正確地返回想要的結果。
到此一個簡單的網關服務就搭建完成,之後在使用過程中遇到任何問題都會更新在本篇部落格中。
參考部落格
//www.cnblogs.com/hellohero55/p/12723451.html