Spring Cloud Gateway 網關嚐鮮

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鏈的方式提供了網關基本的功能,例如:安全,監控/埋點,和限流等。git

可能有同窗就要問了,不是已經有Zuul了嗎,爲何又搞了一個網關,這更新的節奏確實很快哈,沒精力還真學習不過來。github

之因此新搞了一個網關,是由於Zuul基於servlet 2.5 (works with 3.x),使用阻塞API。它不支持任何長期的鏈接,如websocket。web

Gateway創建在Spring Framework 5,Project Reactor和Spring Boot 2上,使用非阻塞API。支持Websockets,由於它與Spring緊密集成,因此它會是一個讓開發者有更好體驗的框架。固然性能的提高是確定的,否則徹底不必從新搞一個啊,只不過Zuul2出來的太遲了,本身已經搞了一個,因此不太可能會將Zuul2集成到Spring Cloud中了。spring

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

工做原理

Spring Cloud Gateway 網關嚐鮮
工做原理
工做原理
如上圖所示,客戶端發送請求到Spring Cloud Gateway,Gateway Handler Mapping肯定請求與路由匹配,則會將請求交給Gateway Web Handler處理。
在代理先後能夠執行多個過濾器。最後代理到具體的服務。安全

項目集成Gateway

首先仍是最基本的步驟,建立一個Maven項目,添加Gateway須要的依賴信息:微信

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.0.1.RELEASE</version>
</parent>

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>Finchley.RELEASE</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

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

編寫啓動類:websocket

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
/**
 * 網關啓動入口
 * 
 * @author yinjihuan
 * 
 * @about http://cxytiandi.com/about
 *
 */
@SpringBootApplication
public class GatewayApplication {
    public static void main(String[] args) {
        SpringApplication.run(GatewayApplication.class, args);
    }
}

簡單路由示列

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

在resources下面建一個application.yml的文件, 內容以下:架構

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

當你訪問http://localhost:8084/course的時候就會轉發到http://cxytiandi.com/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("http://cxytiandi.com"))
              .build();
}

示列代碼:https://github.com/yinjihuan/spring-cloud/tree/master/fangjia-gateway

更多技術分享請關注微信公衆號:猿天地
Spring Cloud Gateway 網關嚐鮮
猿天地

文章推薦
1大牛坐鎮|高端JAVA純技術羣你要加入嗎?
2 Spring Cloud如何提供API給客戶端
3先後端API交互如何保證數據安全性?
4Zuul過濾器獲取請求參數問題?
5Java作爬蟲也很牛

更多技術分享盡在微信羣,加羣請關注公衆號,點擊加羣按鈕。

Spring Cloud Gateway 網關嚐鮮

相關文章
相關標籤/搜索