学习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方便一些,至于性能能够看看网上的评测。

相关文章
相关标签/搜索