Spring Cloud Gateway--網關路由


先簡單實現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>
View Code

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本身。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM