【Spring Cloud】教你十分钟学会Gateway~

【Spring Cloud】教你十分钟学会Gateway~SpringCloudGateway是SpringCloud的一个全新项目,该项目是基于Spring5.0,SpringBoot2.0和ProjectReactor(响应式编程)等技术开发的网关,它旨在为微服务架构提供一种简单有效的统一的API路由管理方式。………

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全家桶1年46,售后保障稳定

  • ? 个人主页: 程序员爱摸鱼
  • ? 版权: 本文由【程序员爱摸鱼】原创、在CSDN首发、需要转载请联系博主
  • ? 如果文章对你有帮助、欢迎关注+点赞+收藏(一键三连)哦
  • 想寻找共同成长的小伙伴,可以互粉哦

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

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


1.1.1 相关术语

Gateway 目标是替代 Zuul,所有基本特性差别不大,主要的区别,底层的通信框架。

术语 描述
Route(路由) 网关配置的基本组成模块,和Zuul的路由配置模块类似。一个Route模块由一个 ID,一个目标 URI,一组断言和一组过滤器定义。如果断言为真,则路由匹配,目标URI会被访问。
Predicate(断言) 这是一个 Java 8 的 Predicate,可以使用它来匹配来自 HTTP 请求的任何内容,例如 headers 或参数。断言的输入类型是一个 ServerWebExchange。
Filter(过滤器) 和Zuul的过滤器在概念上类似,可以使用它拦截和修改请求,并且对上游的响应,进行二次处理。过滤器为org.springframework.cloud.gateway.filter.GatewayFilter类的实例。

1.2 入门

        1.2.1 搭建环境

  • 创建项目:test-gateway-2.1

  • 修改pom,添加坐标
 <dependencies>
        <!-- 网关 -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-gateway</artifactId>
        </dependency>

        <!-- nacos 服务发现 -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>

    </dependencies>

Jetbrains全家桶1年46,售后保障稳定

  • 配置 yml文件:application.yml
#端口号
server:
  port: 10010
spring:
  application:
    name: test-gateway
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848   #nacos服务地址
    gateway:
      discovery:
        locator:
          enabled: true   #开启服务注册和发现的功能,自动创建router以服务名开头的请求路径转发到对应的服务
  • 编写启动类
@SpringBootApplication
@EnableDiscoveryClient
public class TestGatewayApplication {
    public static void main(String[] args) {
        SpringApplication.run(TestGatewayApplication.class, args);
    }

}

        1.2.2 测试

http://localhost:10010/service-consumer/feign/echo/abc

http://localhost:10010/service-provider/echo/abc

2.1 routes路由

        2.1.2 路由匹配规则

  • gateWay的主要功能之一是转发请求,转发规则的定义主要包含三个部分
组成 描述
路由 Route 路由是网关的基本单元, 由ID、URI、一组Predicate、一组Filter组成,根据Predicate进行匹配转发。
断言 Predicate 路由转发的判断条件,目前SpringCloud Gateway支持多种方式, 常见如:Path、Query、Method、Header等,写法必须遵循 key=vlue的形式
过滤器 Filter 过滤器是路由转发请求时所经过的过滤逻辑,可用于修改请求、响应内容
  • 修改yml文件,添加
    routes:
      - id: consumer				  #自定义
        uri: lb://service-consumer    #访问路径
        predicates:					  #断言
          - Path=/consumer/**
        filters:					  #过滤器
          - StripPrefix=1 

    2.2.1 predicates 断言

        在 Spring Cloud Gateway 中 Spring 利用 Predicate 的特性实现了各种路由匹配规则,有通过 Header、请求参数等不同的条件,来进行作为条件匹配到对应的路由。

简单来说, Predicate 就是一组匹配规则,方便请求过来时,匹配到对应的 Route 进行处理。

  • Spring Cloud GateWay 内置多种 Predicate ,如下:

规则 实例
Path – Path=/gate/,/rule/
Before – Before=2017-01-20T17:42:47.789-07:00[America/Denver]
After – After=2017-01-20T17:42:47.789-07:00[America/Denver]
Between – Between=2017-01-20T17:42:47.789-07:00[America/Denver],2017-01-21T17:42:47.789-07:00[America/Denver]
Cookie – Cookie=chocolate, ch.p
Header – Header=X-Request-Id, \d+
Host – Host=www.hd123.com
Method – Method=GET
Query – Query=baz
RemoteAddr – RemoteAddr=192.168.1.1/24
  • 实例1:通过请求参数匹配
spring:
  cloud:
    gateway:
      routes:
        - id: query
          uri: http://www.czxy.com
          predicates:
            - Query=my,123
#访问路径,有参数my将转发到www.czxy.com
http://localhost:10010/?my=123
  • 实例2:通过请求路径匹配
spring:
  cloud:
    gateway:
      routes:
        - id: path
          uri: http://www.czxy.com
          predicates:
            - Path=/czxy/{flag}
# 
http://localhost:10010/czxy/666
  • 总结:

    • 各种 Predicates 同时存在于同一个路由时,请求必须同时满足所有的条件才被这个路由匹配。

    • 一个请求满足多个路由的断言条件时,请求只会被首个成功匹配的路由转发

7.3.3 Filter 网关过滤器

  • 路由过滤器允许以某种方式修改传入的HTTP请求或传出HTTP响应。

过滤规则 实例 说明
PrefixPath – PrefixPath=/app 对所有的请求路径添加前缀app
RedirectTo – RedirectTo=302, 首页 – 传智专修学院 重定向,配置包含重定向的返回码和地址
RemoveRequestHeader – RemoveRequestHeader=X-Request-Foo 去掉某个请求头信息
RemoveResponseHeade – RemoveResponseHeader=X-Request-Foo 去掉某个响应头信息
RemoveRequestParameter – RemoveRequestParameter=red 去掉某个请求参数信息
RewritePath – RewritePath=/where(?<segment>/?.), /test(?<segment>/?.) 改写路径 /where/… 改成 /test/…
SetPath – SetPath=/{segment} 设置请求路径,与RewritePath类似
SetRequestHeader – SetRequestHeader=X-Request-Red, Blue 设置请求头信息
SetStatus – SetStatus=401 设置响应状态码
StripPrefix – StripPrefix=2 跳过指定路径
RequestSize – name: RequestSize args: maxSize: 5000000 请求大小
  • 实例1:跳过指定路径
spring:
  cloud:
    gateway:
      routes:
        - id: consumer
          uri: lb://service-consumer  
          predicates:
            - Path=/consumer/**       
          filters:
            - StripPrefix=1

  • 实例2:添加前缀
spring:
  cloud:
    gateway:
      routes:
        - id: PrefixPath
          uri: lb://service-consumer
          predicates:
            - Path=/consumer/**
          filters:
            - StripPrefix=1
            - PrefixPath=/feign
  • 实例3:改写路径
spring:
  cloud:
    gateway:
      routes:
        - id: RewritePath
          uri: lb://service-consumer
          predicates:
            - Path=/consumer/**
          filters:
            - RewritePath=/consumer(?<segment>/?.*), $\{segment}

到这里说明你已经学会了哦,努力学习!学无止境!!!

【Spring Cloud】教你十分钟学会Gateway~                                   【Spring Cloud】教你十分钟学会Gateway~                                     【Spring Cloud】教你十分钟学会Gateway~


想要了解更多吗?没时间解释了,快来点一点!!!
程序员爱摸鱼?
————————————————
版权声明:本文为CSDN博主「程序员爱摸鱼」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:程 序 员 爱 摸 鱼?

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

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/226712.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Thinking in Java 系列 —(一)基本语法和操作

    Thinking in Java 系列 —(一)基本语法和操作前言本系列由阅读Thinkinjava4th英文原版完成。Thinkinjava作为最权威的java书籍之一,读起来其实并不通俗易懂,并不适合初学者。但是他的解释和语言是java运行的标准。当我读的时候有一些语句是非常直接且到位的表达了一种机制和他最简单的存在的意义。相信只有清楚的描述了每种机制或语法是如何发明出来的,才能够了解他如何使用。这也是本书的精髓。本系列会陆续进行更新。…

    2022年7月8日
    23
  • 版图设计

    版图设计一、电路-版图-掩膜-光刻之间关系1.什么是版图集成电路制造工艺中,通过光刻和刻蚀将掩膜版上的图形转移到硅片上。这种制造集成电路时使用的掩膜版上的几何图形定义为集成电路的版图。集成电路制造厂

    2022年8月1日
    13
  • ym——Android从零开始(9)(ContentProvider内容提供者)(新)

    ym——Android从零开始(9)(ContentProvider内容提供者)(新)ContentProvider内容提供者ContentProvider 进程间通讯,进程间数据的访问/对外共享数据用优点:提供了统一的访问方式原理分析图实现抽象类ContentProvider  安卓应用实现抽象类ContentProvider,并实现对本地数据库增删查改的四个方法,且在清单文件注册该ContentProvid

    2022年6月22日
    31
  • html设置ie9兼容性视图,ie9兼容性设置在哪里 IE兼容性视图在哪里设置?「建议收藏」

    html设置ie9兼容性视图,ie9兼容性设置在哪里 IE兼容性视图在哪里设置?「建议收藏」找不到“兼容性视图设置”子菜单如何在360浏览器IE9上设置兼容性视图还有一种方法打开菜单栏,就是鼠标右键点击上方的空白处,选择“菜单栏”,然后菜单栏就显示“工具”。【兼容性视图设置】的窗口,选择“添加此网址”。IE兼容性视图设置在哪兼容性视图怎么设置在浏览器右上角的设置里设置,设置方法如下:方法1首先,打开电脑,找到电脑桌面上的IE浏览器,并点击打开,打开后,进入任一网页,找到页面右上方的…

    2025年10月9日
    3
  • mysql怎么创建账户_mysql添加索引

    mysql怎么创建账户_mysql添加索引1.使用root账户登录到mysql:mysql -uroot -p2.创建用户名和密码:grant all on *.* to 用户名@’127.0.0.1′ identified by "密码";3.创建成功后,需设置访问权限。首先切换到mysql数据库:use mysql;4.修改新建用户的权限:update user set host = ‘%’ where user = ‘attckne…

    2022年8月18日
    9
  • query.php?sl=,stripslashes_deep().?php stripslashes?php stripslashes和addsl

    query.php?sl=,stripslashes_deep().?php stripslashes?php stripslashes和addsl你是否正在寻找关于stripslashes的内容?让我把最简洁的东西奉献给你:phpstripslashes和addslashes的区别作者:字体:[]类型:转载时间:2014-02-03这篇文章主要介绍了phpstripslashes和addslashes的区别,特分享下方便需要的朋友。我们在向mysql写入数据时,比如:复制代码代码如下:mysql_query(“update…

    2022年10月9日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号