微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

SpringCloud网关组件Gateway的简单使用

Gateway简介

SpringCloud Gateway 是 Spring Cloud 的一个全新项目,该项目是基于 Spring 5.0,Spring Boot 2.0 和 Project Reactor 等技术开发的网关,它旨在为微服务架构提供一种简单有效的统一的 API 路由管理方式。

SpringCloud Gateway 作为 Spring Cloud 生态系统中的网关,目标是替代 Zuul,在Spring Cloud 2.0以上版本中,没有对新版本的Zuul 2.0以上最新高性能版本进行集成,仍然还是使用的Zuul 2.0之前的非Reactor模式的老版本。而为了提升网关的性能,SpringCloud Gateway是基于WebFlux框架实现的,而WebFlux框架底层则使用了高性能的Reactor模式通信框架Netty。

Spring Cloud Gateway 的目标,不仅提供统一的路由方式,并且基于 Filter 链的方式提供了网关基本的功能,例如:安全,监控/指标,和限流。

SpringCloud Gateway 特征

SpringCloud官方,对SpringCloud Gateway 特征介绍如下:
(1)基于 Spring Framework 5,Project Reactor 和 Spring Boot 2.0
(2)集成 Hystrix 断路器
(3)集成 Spring Cloud discoveryClient
(4)Predicates 和 Filters 作用于特定路由,易于编写的 Predicates 和 Filters
(5)具备一些网关的高级功能:动态路由、限流、路径重写
从以上的特征来说,和Zuul的特征差别不大。SpringCloud Gateway和Zuul主要的区别,还是在底层的通信框架上。Spring Cloud Gateway 底层使用了高性能的通信框架Netty。

一个Gateway的简单示例

创建Gateway网关服务zx-gateway-runner

引入主要依赖

    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-gateway</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
    </dependency>

bootstrap.yml主要配置信息

spring:
  application:
    name: zx-gateway-runner
    version: 1.0.0
    description: gateway网关服务

application.yml配置信息

server:
  port: 8013

logging:
  config: classpath:logback.xml

eureka:
  client:
    service-url:
      defaultZone: http://zxdemo:[email protected]:8002/eureka/
  instance:
    prefer-ip-address: true
  server:
    eviction-interval-timer-in-ms: 1000

spring:
  cloud:
    gateway:
      discovery:
        locator:
          enabled: false
          lowerCaseServiceId: true
      routes:
        - id: zx_path_route
          uri: lb://zx-feign-service
          predicates:
            - Path=/api/v1/test/**
          filters:
            - StripPrefix=3
      globalcors:
        corsConfigurations:
          '[/**]':
            allowedOrigins: "*"
            allowedMethods: "*"

spring.cloud.gateway.discovery.locator.enabled为true,表明gateway开启服务注册和发现的功能,并且spring cloud gateway自动根据服务发现为每一个服务创建了一个router,这个router将以服务名开头的请求路径转发到对应的服务。
spring.cloud.gateway.discovery.locator.lowerCaseServiceId是将请求路径上的服务名配置为小写(因为服务注册的时候,向注册中心注册时将服务名转成大写的了)。

routes的配置说明

id:自定义的路由 ID,保持唯一就行
uri:目标服务地址
predicates:路由条件,Predicate 接受一个输入参数,返回一个布尔值结果。该接口包含多种方法来将 Predicate 组合成其他复杂的逻辑(比如:与,或,非)。
filters:过滤条件
示例中配置的过滤器StripPrefix,作用是去掉请求路径的最前面n个部分截取掉。StripPrefix=3就代表截取路径的个数为3,比如前端过来请求/api/v1/test/api/demo/getData,匹配成功后,路由到后端的请求路径就会变成http://localhost:8004/api/demo/getData

globalcors的配置说明

当前配置是,请求通过经过gateWay网关时,需要在网关统一配置跨域请求,需求所有请求通过。

启动类

@SpringCloudApplication
public class GatewayRunnerApiApplication {

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

}

启动注册中心和一个服务

基于前几课的打下的基础,这里我们直接启动之前的注册中心(不清楚注册中心eureka搭建的请点击这里),注册中心启动好之后,然后启动zx-feign-service服务(服务的搭建可参考SpringCloud之Ribbon的组件使用),都启动好之后,如图:

image.png

启动刚创建的Gateway网关服务zx-gateway-runner,启动好之后,会注册到eureka,如图:

image.png

验证一把,如图:

image.png

通过上面的示例演示,可以看出访问网关和对应的接口,实际根据配置的转发规则把请求转发到对应的服务了。

本文项目源码地址:

https://github.com/cdzxkj/zx_springcloud_demo

转载请注明来自:

https://blog.csdn.net/javanian

欢迎访问博主的独立站:

http://www.muzijinxin.com/

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐