SpringCloud Gateway---网关

Spring Cloud的整个布局

在这里插入图片描述

Spring Cloud Gateway(网关)
1、什么是网关

网关的角色是作为一个 API 架构,用来保护、增强和控制对于 API 服务的访问。

API 网关是一个处于应用程序或服务(提供 REST API 接口服务)之前的系统,用来管理授权、访问控制和流量限制等,这样 REST API 接口服务就被 API 网关保护起来,对所有的调用者透明。因此,隐藏在 API 网关后面的业务系统就可以专注于创建和管理服务,而不用去处理这些策略性的基础设施。

2、网关的作用

(1)作为所有API接口服务请求的接入点;

(2)作为所有后端业务的聚合点;

(3)实现安全、验证、路由、过滤等策略;

(4)对所有API服务和策略进行统一管理。

3、常用的网关(区别)
GatewayZull
所属Spring CloudNetflix
底层servlet、webfluxservlet
依赖spring-cloud-starter-gatewayspring-cloud-starter-netflix-zuul
功能异步支持(Netty)、负载均衡、流控同步支持
4、Gateway简介

Spring Cloud Gateway是Spring官方基于Spring 5.0,Spring Boot 2.0和Project Reactor等技术开发的网关,Spring Cloud Gateway旨在为微服务架构提供一种简单而有效的统一的API路由管理方式。Spring Cloud Gateway作为Spring Cloud生态系中的网关,目标是替代ZUUL,其不仅提供统一的路由方式,并且基于Filter链的方式提供了网关基本的功能,例如:安全,监控/埋点,和限流等。

Gateway的几个重要的概念:

(1)Route(路由):网关的基本构建块。由一个ID、一个目标URI、一组断言Predicate和一组过滤器filter定义。若断言为真,则路由匹配;

(2)Predicate(断言):路由转发的判断条件,目前SpringCloud Gateway支持多种方式。可用它来匹配来自HTT请求的任何内容。

(3)过滤器(filter):分别有网关过滤器和全局过滤器,过滤器是路由转发请求时所经过的过滤逻辑,可用于修改请求、响应内容。

Gateway的特征:
  • 建立在Spring Framework 5,Project Reactor和Spring Boot 2.0之上;
  • 能够匹配任何请求属性上的路由;
  • 断言和过滤器特定于路由;
  • Hystrix断路器集成;
  • Spring Cloud DiscoveryClient集成;
  • 易于编写的谓词和过滤器;
  • 请求速率限制;
  • 路径改写。
5、Gateway使用

Spring Cloud Gateway网关路由有两种配置方式:

(1)在配置文件yml中配置

(2)通过@Bean自定义RouteLocator,在启动类Application中配置

下面主要讲解yml文件配置:

(1)pom.xml引入依赖

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

(2)yml配置文件

server:
port: 8064  #端口号
spring:
application:
 name: srpingboot-gateway  #项目名称
cloud:   #Gateway网关配置
 gateway:
   discovery:
     locator:
       enabled: true  # 是否和服务注册与发现组件结合,设置为 true 后可以直接使用应用名称调用服务
   routes:
     - id: gateway_service    #自定义路由ID
       uri: lb://springboot-mybatis  #目标服务地址,springboot-mybatis服务名称
       predicates:  #断言
         - Path=/**   #Path匹配规则

Gateway配置文件的个字段的含义:

id:自定义的路由ID;

uri:目标服务地址;

predicates:路由条件,Predicate 接受一个输入参数,返回一个布尔值结果

在上面的配置中,当访问http://localhost:8064/test就会自动转到http://localhost:8098/emp/all,这里要这一需要完全匹配Path的值才能进行路由转发。

访问效果日下所示:

在这里插入图片描述

常见的路由断言配置:

server:
 port: 8064  #端口号
spring:
 application:
   name: srpingboot-gateway  #项目名称
 cloud:   #Gateway网关配置
   gateway:
     discovery:
       locator:
         enabled: true  # 是否和服务注册与发现组件结合,设置为 true 后可以直接使用应用名称调用服务
     routes:
       - id: gateway_service    #自定义路由ID
         uri: lb://springboot-mybatis  #目标服务地址,springboot-mybatis服务名称
         predicates:  #断言
           - Path=/**   #Path匹配规则
           - After=2017-01-20T17:42:47.789-07:00[America/Denver] #在该日期时间之后发生的请求都将被匹配
           - Before=2017-01-20T17:42:47.789-07:00[America/Denver]  #在该日期时间之前发生的请求都将被匹配
           - Cookie=chocolate, ch.p  #请求包含次cookie名称且正则表达式为真的将会被匹配。
           - Header=X-Request-Id, \d+  #请求包含次header名称且正则表达式为真的将会被匹配。
           - Method=GET     #需要匹配的HTTP请求方式
           - Query=baz  #请求方式中包含参数baz
           - RemoteAddr=192.168.1.1/24  #如果请求的remote address 为 192.168.1.10则将被路由

Gateway内部提供了很多种灵活的路由转发规则,在同一个路由内可存在多个Predicates。若配置以上断言转发规则,则必须同时满足Predicates是请求才会被路由转发。

项目源码地址:https://github.com/jha042120/SpringCloud

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值