spring_cloud之网关(Gateway)

一、Gateway 网关简介

  •   spring cloud Gateway 是spring 基于spring 5.0 spring boot 2.0、Project Reactor等技术开发
  •   spring cloud Gateway 基于filter链提供网关基本功能:安全、监控/埋点、限流等
  •   spring cloud Gateway 为微服务架构提供简单、有效的统一api路由器管理方式。
  •   spring cloud GateWay 代替 Netflix Zuul 的解决方案。 Netflix Zuul 目前处于维护状态,无新功能的开发

  核心:过滤和路由

  Gateway组件核心是一系列的过滤器,通过这些过滤器将客户端的请求转发到对应的微服务中,是加在整个微服务最前沿的防火墙和代理器,隐藏微服务ip信息,从而加强安全保护。Gateway本身就是一个微服务,需要注册到Eureka中。

  添加网关Gateway微服务架构图:

  

   不管使来自客户端的请求,还是服务内部调用都可通过网关,然后在通过网关实现鉴权、动态路由等操作。网关就是统一入口。

  核心概念:

  • 路由(route) :路由信息组成。由一个Id、一个目的URL、一组断言工厂、一组filter组成。如果路由器断言为真。说明请求Url和配置路由匹配。
  • 断言(predicate):Gateway中的断言函数输入类型是spring 5.0 框架中的 serverWebExchange。Gateway中的断言函数允许开发者自定义匹配来自 http request 中的任何信息。参数和请求头。
  • 过滤器(filter): 一个标准的spring WebFilter.Gateway中的filter 分为2种类型。分别是 Gateway Filter 、Global Filter。过滤器会将请求和响应进行修改处理。

二、简单入门

  1、所需依赖pom.xml 需要注册到eureke 注册中心所以添加Eureka client 依赖 

1 <dependency>
2     <groupId>org.springframework.cloud</groupId>
3     <artifactId>spring-cloud-starter-gateway</artifactId>
4 </dependency>
5 
6 <dependency>
7     <groupId>org.springframework.cloud</groupId>
8     <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
9 </dependency>

   2、启动添加注解  @EnableDiscoveryClient  

   3、配置文件application.yml 添加路由配置 、将请求到网关服务地址中包含 /provider/ 的请求路由转发的 192.168.188.10:9091 服务上 

 1 spring:
 2   cloud:
 3     gateway:
 4       routes:
 5           # 路由Id
 6         - id: springcloud-eureka-provider-routes
 7           #代理服务器地址
 8           uri: http://192.168.188.10:9091
 9           #断言规则
10           predicates:
11             - Path=/provider/**

路由地址写死不合理,可spring cloud Gateway 中通过配置动态路由。详情见:面向服务路由

三、面向服务路由 将ip地址 使用lb://服务名代替 Gateway根据服务名通过ribbon算法获取服务地址  ,lb:后的服务名必须在Eureka中注册才能使用

 1 spring: 
 2   cloud:
 3     gateway:
 4       routes:
 5           # 路由Id
 6         - id: springcloud-eureka-provider-routes
 7           #代理服务器地址
 8           uri: lb://springcloud-eureka-provider
 9           #断言规则
10           predicates:
11             - Path=/provider/**

log 分析 

四、 路由前缀处理

  1、前缀的添加与去除

    

    客户端请求地址与微服务请求地址不一致时,可通过配置路径过滤器实现路径前缀的添加个去除

  添加前缀配置:关键字:PrefixPath  

 1 spring:
 2   cloud:
 3     gateway:
 4       routes:
 5           # 路由Id
 6         - id: springcloud-eureka-provider-routes
 7           #代理服务器地址
 8           uri: lb://springcloud-eureka-provider
 9           #断言规则
10           predicates:
11             - Path=/**
12           filters:
13             - PrefixPath=/provider

   去除前缀配置: 关键:StripPrefix  

spring:
  cloud:
    gateway:
      routes:
          # 路由Id
        - id: springcloud-eureka-provider-routes
          #代理服务器地址
          uri: lb://springcloud-eureka-provider
          #断言规则
          predicates:
            #- Path=/**
            - Path=/api/provider/**
          filters:         
          #配置去除前缀 1:标识1个路径 2:标识2个路径 以此类推
            - StripPrefix=1
原文地址:https://www.cnblogs.com/lxn0216/p/14206720.html