先簡單實現Spring Cloud Gateway的路由功能,感覺一下
1.創建Spring Boot 應用spring-cloud-gateway,添加起步依賴spring-cloud-starter-gateway

<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.3.6.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.example</groupId> <artifactId>spring-cloud-gateway</artifactId> <version>0.0.1-SNAPSHOT</version> <name>spring-cloud-gateway</name> <description>Demo project for Spring Boot</description> <properties> <java.version>1.8</java.version> <spring-cloud.version>Hoxton.SR9</spring-cloud.version> </properties> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-gateway</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> <exclusions> <exclusion> <groupId>org.junit.vintage</groupId> <artifactId>junit-vintage-engine</artifactId> </exclusion> </exclusions> </dependency> </dependencies> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>${spring-cloud.version}</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
2.在application.yml文件中配置網關路由規則
server:
port: 8080
spring:
cloud:
gateway:
routes:
- id: neo_route
uri: https://www.cnblogs.com
predicates:
- Path=/dreamstar99
3.啟動spring-cloud-gateway應用,訪問http://localhost:8080/dreamstar99。理論上會跳轉到 https://www.cnblogs.com/dreamstar99。 也可能會可能會報錯如下,如果沒有,請忽略……
查看log發現報錯如下:
報錯原因:在C:/WINDOWS/system32/drivers/etc/hosts文件里面主機名和本地循環地址沒有匹配到。host 是一個沒有擴展名的系統文件,可以用記事本等工具打開,其作用就是將一些常用的網址域名與其對應的IP地址建立一個關聯“數據庫”,當用戶在瀏覽器中輸入一個需要登錄的網址時,系統會首先自動從Hosts文件中尋找對應的IP地址,一旦找到,系統會立即打開對應網頁,如果沒有找到,則系統再會將網址提交 DNS域名解析服務器進行IP地址的解析。
解決辦法: 1.需要在hosts文件中添加上該域名的解析ip地址。2.如果我們沒有權限修改hosts文件,或者不想修改,那么可以在本地再啟動一個微服務,然后把spring-cloud-gateway的/discoveryClient 路由到本地的這個微服務。這里我們采用方法2。
4.修改application.yml文件中配置路由規則,路由到本地的另外一個啟動的微服務。這里的微服務我借用Spring Cloud Eureka 服務治理--服務發現與消費里的eureka-client微服務
server:
port: 8080
spring:
cloud:
gateway:
routes:
- id: neo_route
uri: http://localhost:2001/
predicates:
- Path=/discoveryClient
5.啟動微服務spring-cloud-gateway 和 eureka-client。再次訪問http://localhost:8080/discoveryClient。發現和直接訪問http://localhost:2001/discoveryClient是一樣的效果。說明spring-cloud-gateway實現了服務路由功能。
這一篇的重點被hosts文件帶跑了,這是使用spring-cloud-gateway時遇到的第一個攔路虎,但是卻spring cloud gateway本身無關。所以這篇就到這兒結束,主要點就是網關路由時 被路由到的網站ip地址要在網關微服務所運行的機器hosts文件中配置。下一篇再從頭寫spring cloud gateway本身。