學習SpringCloud(5)路由網關 Gateway

1、簡介web

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

二、api

  • Zuul構建於 Servlet 2.5,兼容 3.x,使用的是阻塞式的 API,不支持長鏈接,好比 websockets。安全

  • Spring Cloud Gateway構建於 Spring 5+,基於 Spring Boot 2.x 響應式的、非阻塞式的 API。同時,它支持 websockets,和 Spring 框架緊密集成,開發體驗相對來講十分不錯。具體哪一個好咱也不知道了,不過畢竟Gateway是Spring Cloud 本身推出的服務網關,應該比zuul靠譜些。bash

2、建立項目websocket

直接copy一個以前的項目,進行修改架構

pom文件:app

<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>

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
        </dependency>
複製代碼

這裏注意不要引入「spring-boot-starter-web」,否則會衝突。緣由:Spring Cloud Gateway 是使用 netty+webflux 實現所以不須要再引入 web 模塊框架

3、Gateway 路由、以及結合Hystrix 實現熔斷socket

這裏有兩種方式來作,一種是經過配置類,一種是經過配置文件,這裏都實踐一下

3.一、配置類的方式:

新建配置類

@Configuration
public class GatewayRoutes {
    @Bean
    public RouteLocator routeLocator(RouteLocatorBuilder builder) {
        return builder.routes()
                .route(r ->
                        r.path("/api/**")
                        .filters( f -> f.stripPrefix(1)
                                .hystrix(config -> config
                                .setName("root")
                                .setFallbackUri("forward:/fallback")))
                        .uri("lb://spring-cloud-eureka-pro") //uri:lb表示從註冊中心訂閱服務。
                ).build();
    }
}
複製代碼

新建降級服務類,供fallback 使用

@RestController
public class GateFilter {

    @RequestMapping("/fallback")
    public Mono<String> fallback() {
        return Mono.just("服務不可用");
    }
}

複製代碼

另外啓動註冊中心,和 prodiver 進行測試

關閉prodiver

測試結果和預期同樣,實現了路由和熔斷

3.一、配置文件的方式

這裏就不須要上面的配置類了,直接經過配置文件進行配置

application.yml

spring:
  application:
    name: spring-cloud-eureka-cus

  #gateway配置
  cloud:
    gateway:
      routes:
      - id: root
        # uri:lb表示從註冊中心訂閱服務。
        uri: lb://spring-cloud-eureka-pro
        predicates:
          - Path=/api/**
        filters:
          - StripPrefix=1
          #熔斷過濾器
          - name: Hystrix
            args:
              name: fallback
              fallbackUri: forward:/fallback
複製代碼

重啓項目進行測試,測試結果跟上面是同樣的,就不放截圖了,我的感受使用上比zuul方便一些,至於性能能夠看看網上的評測。

相關文章
相關標籤/搜索