亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

SpringCloud Gateway怎么用

發布時間:2021-12-29 14:09:00 來源:億速云 閱讀:139 作者:小新 欄目:云計算

小編給大家分享一下SpringCloud Gateway怎么用,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

Spring Cloud Gateway是Spring Cloud技術棧中的網關服務,本文實戰構建一個SpringCloud環境,并開發一個SpringCloud Gateway應用,快速體驗網關服務;

環境信息

  1. 操作系統:win10(64位)

  2. JDK:1.8.0_181

  3. Maven:3.5.0

  4. Spring Cloud:Greenwich.SR

源碼下載

如果您不打算寫代碼,也可以從GitHub上下載本次實戰的源碼,地址和鏈接信息如下表所示:

名稱鏈接備注
項目主頁https://github.com/zq2599/blog_demos該項目在GitHub上的主頁
git倉庫地址(https)https://github.com/zq2599/blog_demos.git該項目源碼的倉庫地址,https協議
git倉庫地址(ssh)git@github.com:zq2599/blog_demos.git該項目源碼的倉庫地址,ssh協議

</br>

這個git項目中有多個文件夾,本章的源碼在gatewaydemo文件夾下,如下圖紅框所示: SpringCloud Gateway怎么用

整體設計

本次實戰的源碼涉及到三個應用:注冊中心、服務提供者、網關,它們的關系和業務邏輯如下圖: SpringCloud Gateway怎么用 整個工程基于maven構建,采用父子結構,父工程名為gatewaydemo,里面有三個modular,分別是:eureka()注冊中心)、provider(服務提供者)、網關(gateway),在IDEA上呈現的結構如下圖所示: SpringCloud Gateway怎么用 準備完畢,開始編碼吧;

創建父工程

  1. 創建名為gatewaydemo的maven工程,pom.xml內容如下,這是個典型的父子工程pom,dependencyManagement節點接管了版本匹配:

<?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 http://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.1.6.RELEASE</version>
        <relativePath/>
    </parent>
    
    <groupId>com.bolingcavalry</groupId>
    <artifactId>gatewaydemo</artifactId>
    <packaging>pom</packaging>
    <version>1.0-SNAPSHOT</version>
    <modules>
        <module>eureak</module>
        <module>provider</module>
        <module>gateway</module>
    </modules>

    <properties>
        <java.version>1.8</java.version>
        <spring-boot.version>2.1.6.RELEASE</spring-boot.version>
        <maven-compiler-plugin.version>3.5</maven-compiler-plugin.version>
        <maven-deploy-plugin.version>2.8.2</maven-deploy-plugin.version>
        <maven-failsafe-plugin.version>2.18.1</maven-failsafe-plugin.version>
        <maven-surefire-plugin.version>2.21.0</maven-surefire-plugin.version>
        <spring-cloud.version>Greenwich.SR2</spring-cloud.version>
    </properties>

    <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>
</project>
  1. 如果您是用IDEA創建的工程,那么IDEA可能會在pom.xml所在目錄自動創建<font color="blue">src</font>文件夾,請手動將其刪除,因為用不上;

eureka工程

  1. 接下來是創建注冊中心,鼠標右鍵點擊<font color="blue">gatewaydemo</font>文件夾,選擇"New -> Module": SpringCloud Gateway怎么用

  2. 在彈出窗口選擇<font color="blue">Spring Initializr</font>,如下圖: SpringCloud Gateway怎么用

  3. 接下來的窗口填寫Group、Artifact(這里是eureka)、Version等信息,其余的默認,即可完成子工程的創建;

  4. 新的eureka模塊的pom.xml,請修改成如下內容,可見除了指定父工程,還依賴了<font color="blue">spring-cloud-starter-netflix-eureka-server</font>:

<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>gatewaydemo</artifactId>
        <groupId>com.bolingcavalry</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>eureak</artifactId>
    <packaging>war</packaging>

    <name>eureak Maven Webapp</name>

    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
        </dependency>
    </dependencies>

    <build>
        <finalName>${project.artifactId}</finalName>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>
  1. src\main\resources目錄下新增application.yml文件,內容如下,這是普通的注冊中心設置:

spring:
  application:
    name: eureka
server:
  port: 8080

eureka:
  client:
    service-url:
      defaultZone: http://localhost:${server.port}/eureka/
    fetch-registry: false
    register-with-eureka: false
  1. java文件只有一個,就是啟動類,還通過注解EnableEurekaServer開啟了注冊中心服務:

package com.bolingcavalry.eureka;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;

@SpringBootApplication
@EnableEurekaServer
public class EurekaApplication {

    public static void main(String[] args) {
        SpringApplication.run(EurekaApplication.class, args);
    }
}
  1. 以上就是注冊中心eureka的內容,運行EurekaApplication即可啟動服務,訪問8080端口的結果如下: SpringCloud Gateway怎么用 現在注冊中心已經就緒,開始編寫服務提供者provider應用的代碼吧。

provider工程

  1. 在gatewaydemo下創建一個子工程,名為provider,pom.xml內容如下,可見用到了spring-boot-starter-web和spring-cloud-starter-netflix-eureka-client這兩個依賴,分別用來支持web服務和注冊發現:

<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>gatewaydemo</artifactId>
        <groupId>com.bolingcavalry</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>provider</artifactId>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>
    </dependencies>

    <build>
        <finalName>${project.artifactId}</finalName>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>
  1. 配置文件application.yml如下,指定了注冊中心地址,并且自身端口為8081:

eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:8080/eureka/
server:
  port: 8081
spring:
  application:
    name: provider
  1. 啟動類ProviderApplication.java:

package com.bolingcavalry.provider;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class ProviderApplication {

    public static void main(String[] args) {
        SpringApplication.run(ProviderApplication.class, args);
    }
}
  1. 增加一個controller,用于響應web請求,注意hello方法會從請求的header中取出名為<font color="blue">extendtag</font>的屬性值,返回給瀏覽器:

package com.bolingcavalry.provider.controller;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.http.HttpServletRequest;
import java.text.SimpleDateFormat;
import java.util.Date;

@RestController
@RequestMapping("/hello")
public class HelloController {

    @RequestMapping(value = "time", method = RequestMethod.GET)
    public String hello(HttpServletRequest request){

        return "hello, "
                + new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())
                + ", extendtag ["
                + request.getHeader("extendtag")
                + "]";
    }
}
  1. 啟動應用,再次刷新eureka的頁面localhost:8080,可見provider應用已經注冊上去了,如下圖紅框所示: SpringCloud Gateway怎么用

  2. 訪問地址:http://localhost:8081/hello/time ,這是controller提供的web服務接口,得到響應如下圖,因為header中沒有名為"extendtag"的屬性,因此返回了null: SpringCloud Gateway怎么用 提供服務的provider已經OK,可以開發網關服務了;

gateway工程

  1. 在gatewaydemo下創建一個子工程,名為gateway,pom.xml內容如下,可見用到了spring-cloud-starter-gateway和spring-cloud-starter-netflix-eureka-client這兩個依賴,分別用來支持網關服務和注冊發現:

<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>gatewaydemo</artifactId>
        <groupId>com.bolingcavalry</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>gateway</artifactId>

    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-gateway</artifactId>
        </dependency>
    </dependencies>

    <build>
        <finalName>${project.artifactId}</finalName>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>
  1. 配置文件application.yml如下,指定了注冊中心地址,并且自身端口為8082,還有開啟了網關服務:

server:
  port: 8082

spring:
  application:
    name: gateway
  cloud:
    gateway:
      discovery:
        locator:
          enabled: true
          lowerCaseServiceId: true
eureka:
  client:
    service-url:
      defaultZone: http://localhost:8080/eureka/
  1. 啟動類GatewayApplication .java,可見實例化了一個RouteLocator,該實例就是路由規則,具體的功能請參考代碼中的注釋:

package com.bolingcavalry.gateway;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.gateway.route.RouteLocator;
import org.springframework.cloud.gateway.route.builder.RouteLocatorBuilder;
import org.springframework.context.annotation.Bean;

@SpringBootApplication
public class GatewayApplication {

    public static void main(String[] args) {
        SpringApplication.run(GatewayApplication.class, args);
    }

    @Bean
    public RouteLocator customRouteLocator(RouteLocatorBuilder builder) {
        return builder.routes()
                //增加一個path匹配,以"/gateway/hello/"開頭的請求都在此路由
                .route(r -> r.path("/customize/hello/**")
                        //表示將路徑中的第一級參數刪除,用剩下的路徑與provider的路徑做拼接,
                        //這里就是"lb://provider/hello/",能匹配到provider的HelloController的路徑
                        .filters(f -> f.stripPrefix(1)
                                       //在請求的header中添加一個key&value
                                       .addRequestHeader("extendtag", "geteway-" + System.currentTimeMillis()))
                        //指定匹配服務provider,lb是load balance的意思
                        .uri("lb://provider")
                ).build();
    }
}
  1. 啟動應用,再次刷新eureka的頁面localhost:8080,可見gateway應用已經注冊上去了,如下圖紅框所示: SpringCloud Gateway怎么用

  2. 訪問地址:http://localhost:8082/customize/hello/time ,這是符合前面我們配置的路由規則的路徑,customize被刪除掉之后,將剩余的路徑轉發到provider服務,于是請求的真正地址就是provider服務的/hello/time,得到響應如下圖,因為gateway在轉發的時候給header中設置了名為"extendtag"的屬性,因此返回了extendtag是有內容的: SpringCloud Gateway怎么用 

以上是“SpringCloud Gateway怎么用”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

辽中县| 江川县| 台江县| 铁力市| 拜泉县| 勃利县| 温宿县| 堆龙德庆县| 台湾省| 仲巴县| 延津县| 宣化县| 湘潭县| 新乐市| 中江县| 泰来县| 漳平市| 彭山县| 郓城县| 错那县| 涞源县| 丹阳市| 巫溪县| 广河县| 浮山县| 虎林市| 泰兴市| 开化县| 淅川县| 井冈山市| 河南省| 原阳县| 广丰县| 舟山市| 广德县| 商南县| 当雄县| 南安市| 黑河市| 鹤峰县| 额敏县|