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:zxdemopwd@127.0.0.1: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/

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值