Spring Cloud Gateway 閘道器嚐鮮

猿天地發表於2018-11-14

Gateway 介紹

Spring Cloud Gateway是Spring官方基於Spring 5.0,Spring Boot 2.0和Project Reactor等技術開發的閘道器,Spring Cloud Gateway旨在為微服務架構提供一種簡單而有效的統一的API路由管理方式。Spring Cloud Gateway作為Spring Cloud生態系中的閘道器,目標是替代Netflix ZUUL,其不僅提供統一的路由方式,並且基於Filter鏈的方式提供了閘道器基本的功能,例如:安全,監控/埋點,和限流等。

可能有同學就要問了,不是已經有Zuul了嗎,為什麼又搞了一個閘道器,這更新的節奏確實很快哈,沒精力還真學習不過來。

之所以新搞了一個閘道器,是因為Zuul基於servlet 2.5 (works with 3.x),使用阻塞API。它不支援任何長期的連線,如websocket。

Gateway建立在Spring Framework 5,Project Reactor和Spring Boot 2上,使用非阻塞API。支援Websockets,因為它與Spring緊密整合,所以它會是一個讓開發者有更好體驗的框架。當然效能的提升是肯定的,不然完全沒必要重新搞一個啊,只不過Zuul2出來的太遲了,自己已經搞了一個,所以不太可能會將Zuul2整合到Spring Cloud中了。

關於效能這塊的比較可以參考我周兄的文章《糾錯帖:Zuul & Spring Cloud Gateway & Linkerd效能對比》

工作原理

如上圖所示,客戶端傳送請求到Spring Cloud Gateway,Gateway Handler Mapping確定請求與路由匹配,則會將請求交給Gateway Web Handler處理。
在代理前後可以執行多個過濾器。最後代理到具體的服務。

專案整合Gateway

首先還是最基本的步驟,建立一個Maven專案,新增Gateway需要的依賴資訊:

<parent>
    <groupId>org.springframework.bootgroupId>
    <artifactId>spring-boot-starter-parentartifactId>
    <version>2.0.1.RELEASEversion>
parent>

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloudgroupId>
            <artifactId>spring-cloud-dependenciesartifactId>
            <version>Finchley.RELEASEversion>
            <type>pomtype>
            <scope>importscope>
        dependency>
    dependencies>
dependencyManagement>

<dependencies>
    <dependency>
        <groupId>org.springframework.cloudgroupId>
        <artifactId>spring-cloud-starter-gatewayartifactId>
    dependency>
dependencies>

編寫啟動類:

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
/**
 * 閘道器啟動入口
 * 
 * @author yinjihuan
 * 
 * @about 
 *
 */

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

簡單路由示列

下面來實現一個最簡單的轉發功能,基於Path的匹配轉發功能。

在resources下面建一個application.yml的檔案, 內容如下:

server:
  port: 8084
spring:
  cloud:
    gateway:
      routes:
      - id: path_route
        uri: 
        predicates:
        - Path=/course

當你訪問的時候就會轉發到/course,效果如下:

Spring Cloud Gateway 閘道器嚐鮮

關於路由規則什麼的我們後面再做介紹,本章只是先體驗下Spring Cloud Gateway的功能,能夠建立一個新的專案,成功啟動就可以了,一步步來。

如果你的專案中包含了spring-cloud-starter-gateway,但你不想啟動閘道器的時候可以透過下面的配置禁用掉:

application.properties

spring.cloud.gateway.enabled=false.

application.yml

spring:
  cloud:
    gateway:
      enabled: false

上面講解的是基於配置的方式來實現路由,還有一種方式是透過程式碼的方式來進行路由,比如:

@Bean
public RouteLocator customRouteLocator(RouteLocatorBuilder builder) {
       return builder.routes()
              .route(r -> r.path("/course").uri(""))
              .build();
}

示列程式碼:

原文連結:https://mp.weixin.qq.com/s/92JDqjRcv452FfQUJxuRhw

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31561268/viewspace-2219964/,如需轉載,請註明出處,否則將追究法律責任。

相關文章