zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    Leetcode 1489找到最小生成树李关键边和伪关键边
    Leetcode 113 路径总和 II
    hdu 1223 还是畅通工程
    hdu 1087 Super Jumping! Jumping! Jumping!
    hdu 1008 Elevator
    hdu 1037 Keep on Truckin'
    湖工oj 1241 畅通工程
    湖工oj 1162 大武汉局域网
    hdu 2057 A + B Again
    poj 2236 Wireless Network
  • 原文地址:https://www.cnblogs.com/lxn0216/p/14206720.html
Copyright © 2011-2022 走看看