Spring Cloud Gateway

如何啓動 Spring Cloud Gateway

一、新建 Maven 工程,添加相關依賴 pom.xmlhtml

  1. <?xml version="1.0" encoding="UTF-8"?>java

  2. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"spring

  3.         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0http://maven.apache.org/xsd/maven-4.0.0.xsd">apache

  4.    <modelVersion>4.0.0</modelVersion>app

  5.  

  6.    <groupId>com.anoyi</groupId>maven

  7.    <artifactId>core-gateway</artifactId>spring-boot

  8.    <version>0.0.1-SNAPSHOT</version>測試

  9.  

  10.    <name>core-gateway</name>ui

  11.    <description>gateway for miroservice</description>編碼

  12.  

  13.    <properties>

  14.        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

  15.        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>

  16.        <java.version>1.8</java.version>

  17.    </properties>

  18.  

  19.    <dependencyManagement>

  20.        <dependencies>

  21.            <dependency>

  22.                <groupId>org.springframework.cloud</groupId>

  23.                <artifactId>spring-cloud-gateway</artifactId>

  24.                <version>2.0.0.RELEASE</version>

  25.                <type>pom</type>

  26.                <scope>import</scope>

  27.            </dependency>

  28.        </dependencies>

  29.    </dependencyManagement>

  30.  

  31.    <dependencies>

  32.  

  33.        <dependency>

  34.            <groupId>org.springframework.cloud</groupId>

  35.            <artifactId>spring-cloud-starter-gateway</artifactId>

  36.        </dependency>

  37.  

  38.    </dependencies>

  39.  

  40.    <build>

  41.        <plugins>

  42.            <plugin>

  43.                <groupId>org.springframework.boot</groupId>

  44.                <artifactId>spring-boot-maven-plugin</artifactId>

  45.            </plugin>

  46.        </plugins>

  47.    </build>

  48.  

  49. </project>

二、添加啓動類 Application.java

  1. import org.springframework.boot.SpringApplication;

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

  3. import org.springframework.context.annotation.Configuration;

  4.  

  5. @Configuration

  6. @SpringBootApplication

  7. public class Application {

  8.  

  9.    public static void main(String[] args) {

  10.        SpringApplication.run(Application.class, args);

  11.    }

  12.  

  13. }

三、啓動 Application(和 Spring Boot 項目同樣)

訪問 http://localhost:8080/ 報錯 404,同時日誌輸出:

  1. 2018-06-27 09:18:48.981  WARN 44156 --- [ctor-http-nio-2] .a.w.r.e.DefaultErrorWebExceptionHandler :

  2. Failed to handle request [GET http://localhost:8080/]: Response status 404

配置服務的路由:配置文件方式

假設本地啓動了另外兩個 Spring Boot 服務,分別是 服務A( http://localhost:8081)、服務B( http://localhost:8082 ),下面經過 Spring Cloud Gateway 來路由到這兩個服務。

一、在 resources 路徑下添加配置文件 application.yml

  1. spring:

  2.  cloud:

  3.    gateway:

  4.      routes:

  5.      - id: host_route

  6.        uri: http://localhost:8081

  7.        predicates:

  8.        - Path=/a/**

  9.        filters:

  10.        - StripPrefix=1

  11.      - id: host_route

  12.        uri: http://localhost:8082

  13.        predicates:

  14.        - Path=/b/**

  15.        filters:

  16.        - StripPrefix=1

  • id:固定,不一樣 id 對應不一樣的功能,可參考 官方文檔

  • uri:目標服務地址

  • predicates:路由條件

  • filters:過濾規則

二、重啓 Gateway 服務

三、測試

訪問 http://localhost:8080/a/ 路由到 服務A http://localhost:8081/

訪問 http://localhost:8080/b/ 路由到 服務B http://localhost:8082/

其餘地址,例如 http://localhost:8080/a/user/all 路由到 服務A http://localhost:8081/user/all

配置服務的路由:編碼方式

實現如上服務路由,還能夠經過編碼的方式實現。

一、刪除配置文件 application.yml

二、修改 Application.java, 添加自定義路由配置

  1. import org.springframework.boot.SpringApplication;

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

  3. import org.springframework.cloud.gateway.filter.factory.StripPrefixGatewayFilterFactory;

  4. import org.springframework.cloud.gateway.route.RouteLocator;

  5. import org.springframework.cloud.gateway.route.builder.RouteLocatorBuilder;

  6. import org.springframework.context.annotation.Bean;

  7.  

  8. @SpringBootApplication

  9. public class Application {

  10.  

  11.    @Bean

  12.    public RouteLocator customRouteLocator(RouteLocatorBuilder builder) {

  13.        StripPrefixGatewayFilterFactory.Config config = new StripPrefixGatewayFilterFactory.Config();

  14.        config.setParts(1);

  15.        return builder.routes()

  16.                .route("host_route", r -> r.path("/a/**").filters(f -> f.stripPrefix(1)).uri("http://localhost:8081"))

  17.                .route("host_route", r -> r.path("/b/**").filters(f -> f.stripPrefix(1)).uri("http://localhost:8082"))

  18.                .build();

  19.    }

  20.  

  21.    public static void main(String[] args) {

  22.        SpringApplication.run(Application.class, args);

  23.    }

  24.  

  25. }

其餘功能

http://cloud.spring.io/spring-cloud-gateway/single/spring-cloud-gateway.html

官方提供了大量的路由規則,好比Time、Host、Header 等等,同時也提供了大量的過濾器,好比AddRequestHeader、AddRequestParameter、AddResponseHeader 等等。僅經過簡單的配置便可實現功能強大的網關服務。

相關文章
相關標籤/搜索