springCloud應用網關Gateway簡單示例


springCloud應用網關Gateway簡單示例

近來工作不是很忙,加上空閑時間比較多,想好好了解下springCloud相關知識,今天就從網關系統開始吧。首先我查了相關資料,整理了gateway的基本知識點:

基本知識點

定義

首先我們看下什么是Spring Cloud Gateway,官方文檔給出的解釋是:

提供了一個用於在Spring MVC之上構建API網關的庫。Spring Cloud Gateway旨在提供一種簡單而有效的方法來路由到API,並為它們提供橫切關注點,例如:安全性,監視/指標和彈性

特性

Spring Cloud Gateway 產品特點:

  • 基於Spring Framework 5、Project Reactor和Spring Boot 2.0構建
  • 能夠在任何請求屬性上匹配路由。
  • 對明確指定的路由進行斷言過濾。
  • Hystrix斷路器集成。
  • Spring Cloud DiscoveryClient集成
  • 易於編寫的斷言和過濾器
  • 請求速率限制
  • 路徑重寫

路由配置

gateway支持兩種方式的配置,一種是在application.yml文件中配置,另外還可以通過配置類的方式配置路由規則:

application.yml
spring:
  cloud:
    gateway:
      routes:
      - id: after_route
        uri: https://example.org
        predicates:
        - Cookie=mycookie,mycookievalue

其中,id指的是路由id,可以隨意指定,但不能重復,必須保證唯一;uri指的是目標主機,也就是請求轉發的目的主機;predicates指的是我們的路由規則,也叫斷言,具體的規則,后面再研究。當請求參數符合你配置的斷言規則時,就會把相應的請求轉發至你配置的目標主機上。

配置類

在本次示例中,我采用的是配置類的方式,如果你的配置類和我的一樣,那么當你訪問路徑為/hello/開頭的任意服務時,請求將被轉發至127.0.0.1:8888的地址上,比如你服務地址是:http://127.0.0.1:8080/hello/helloWord,那么最終訪問的地址是http://127.0.0.1:8888/hello/helloWord

@Configuration
public class GatewayConfig {
    @Bean
    public RouteLocator myRoutes(RouteLocatorBuilder builder) {
        return builder.routes()
                .route(p -> p
                        .path("/hello/**")
                        .filters(f -> f.addRequestHeader("Hello", "World"))
                        .uri("http://127.0.0.1:8888"))
                .build();
    }
}

創建項目

這里我們選擇spring Initializr來創建:

填寫項目信息:

選擇spring cloud Routing >> 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.0.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>io.github.syske</groupId>
    <artifactId>api-gateway-demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>api-gateway-demo</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <java.version>1.8</java.version>
        <spring-cloud.version>Hoxton.SR4</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>


免責聲明!

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



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