文章目录

  • 简介
    • routes 路由服务
        • 配置文件方式
        • Java DSL方式
      • predicates 路由断言
      • filters 过滤功能
      • 自定义过滤器

简介

https://mp.weixin.qq.com/s/f2hepLraaqUgRKqq9ZKKsQ

基于 Spring 5.0,Spring Boot 2.0 和 Project Reactor 等技术, 目标是替代 Netflix ZUUL
千万不要依赖 引入spring-boot-starter-web包

  1. 客户端向 Spring Cloud Gateway 发出请求。
  2. 在 Gateway Handler Mapping 中找到与请求相匹配的路由,
  3. 将其发送到 Gateway Web Handler。
  4. Handler 再通过指定的过滤器链来将请求发送到我们实际的服务执行业务逻辑,
  5. 然后返回。

简单来说就是 把符合 {匹配规则} 的请求 发给 {服务地址} ,请求与返回 期间经过 {过滤处理}

routes 路由服务

Spring Gateway支持两种方式提供路由服务,其一是配置文件启用,其二则是通过代码达到目的

spring:application:name: xxxxcloud:# 配置 路由网关gateway:# 配置路由规则routes:- id: {路由id}uri: {服务地址}predicates:- {匹配规则}filters:- {过滤处理}

配置文件方式

spring:application:name: xxxxcloud:# 配置 服务注册发现nacos:discovery:server-addr: 127.0.0.1:8848# 配置 路由网关gateway:# 设置与服务注册发现组件结合,这样可以采用服务名的路由策略discovery:locator:enabled: true# 配置路由规则routes:# 路由 ID,不同的 id 有不同的功能- id: activity-route#  要使用nacos服务注册中心的服务:lb://{注册的服务名}uri: lb://activity# 路由断言Factoriespredicates:- Path=/activity/**- id: search-routeuri: http://localhost:8081predicates:- Method=GETfilters:# 转发请求时去掉1级前缀- StripPrefix=1

表示 以/activity/**开头的请求 转发到 lb://activity服务

Gateway默认转发是全路径的,
设置 StripPrefix =1 表示从二级url路径转发,即http://ip:port/1/2/3会转发到http://ip:port/2/3

Java DSL方式

@Bean
public RouteLocator customRouteLocator(RouteLocatorBuilder builder) {return builder.routes()//一个 .route 就是一个路由规则.route(r -> r.path("/activity/**").filters(f -> f.stripPrefix(1).filter(new TestGetWayFilter()).addResponseHeader("X-Response-Default-Foo", "Default-Bar")).uri("lb://activity").order(0) //如果路由需要有顺序匹配的,需要使用 order 方法 值越小优先匹配.id("activity-route")).route(r -> r.path("/activity/**")//使用.filters(f ->  f.filter(new myFilter())).uri("lb://activity").order(0) //如果路由需要有顺序匹配的,需要使用 order 方法 值越小优先匹配.id("activity-route")).build();}

predicates 路由断言

Spring会根据名称去查找对应的FilterFactory,目前支持的名称有:After、Before、Between、Cookie、Header、Host、Method、Path、Query、RemoteAddr。

predicates:# 在该日期时间之后发生的请求都将被匹配- After=2017-01-20T17:42:47.789-07:00[America/Denver]# 在该日期时间之前发生的请求都将被匹配。- Before=2017-01-20T17:42:47.789-07:00[America/Denver]# 在datetime1和datetime2之间的请求将被匹配- Between=2017-01-20T17:42:47.789-07:00[America/Denver], 2017-01-21T17:42:47.789-07:00[America/Denver]# 请求包含此cookie名称且正则表达式为真的将会被匹配- Cookie=chocolate, regular expression- Header=X-Request-Id, \d+- Host=**.somehost.org,**.anotherhost.org- Method=GET- Path=/foo/{segment},/bar/{segment}- Query=baz- Query=foo, ba.- RemoteAddr=192.168.1.1/24

filters 过滤功能

filters:# 转发请求时去掉1级前缀- StripPrefix=1# 给请求的Header中添加: X-Request-Foo, Bar - AddRequestHeader=X-Request-Foo, Bar# 给响应的Header中添加: X-Request-Foo, Bar - AddResponseHeader=X-Response-Foo, Bar

自定义过滤器

实现 GlobalFilter, Ordered 接口并在类上增加 @Component 注解就可以使用过滤功能

import ......./*** 过滤器*/
@Component
public class myFilter implements GlobalFilter, Ordered {@Overridepublic Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {ServerHttpRequest request = exchange.getRequest();String path = request.getPath().pathWithinApplication().value();//TODOreturn chain.filter(exchange);}/*** 设置过滤器的执行顺序* @return */@Overridepublic int getOrder() {return 1;}
}

Spring Gateway路由网关相关推荐

  1. Gateway 路由网关

    Gateway 路由网关 1-Gateway 概述 1.1-是什么 1.2-能干嘛 1.3-Why Gateway 2-Gateway 核心 2.1-核心概念 2.2-工作流程 3-Gateway 配 ...

  2. SpringCloud之 Gateway路由网关

    文章目录 Gateway 路由网关 一.部署网关

  3. gateway路由网关,zuul的替代品

    zuul1 low, zuul2 还没长大呢,不敢用. gateway 基于netty, spring flux, reactor 异步非阻塞, 快呀. 与spring良好整合, spring社区的呢 ...

  4. GateWay路由网关的概述与入门详解

    一.概述简介 官网:https://cloud.spring.io/spring-cloud-static/spring-cloud-gateway/2.2.1.RELEASE/reference/h ...

  5. Spring Gateway静态文件路由

    Spring Gateway静态文件路由 Spring gateway路由简介 路由到其他微服务的API路由 Spring zuul Spring Gateway 静态文件服务 Spring zuul ...

  6. SpringCloud-getway路由网关

    配置以及整个项目代码请到gitee查看https://gitee.com/xwb1056481167/spring-cloud/ ​服务网关 SpringCloud中集成的Zuul版本,采用的是Tom ...

  7. SpringCloud-07-新一代路由网关Spring Cloud Gateway

    服务网关Gateway 1. 概述简介 1. SpringCloud Gateway是什么? 服务网关还可以用Zuul网关,但是Zuul网关由于一些维护问题,所以这里我们学习Gateway网关,Spr ...

  8. SpringCloud Alibaba微服务实战(六) - 路由网关(Gateway)

    什么是 Spring Cloud Gateway? Spring Cloud Gateway 是 Spring 官方基于 Spring 5.0,Spring Boot 2.0 和 Project Re ...

  9. Spring Cloud Gateway 路由转发之After(Before)路由断言工厂使用

    前言 本文旨在介绍After(Before)路由断言工厂使用,以此类推可以使用其他路由断言工厂 案例 1.概念 网关简单的说就是提供一个对外统一的API入口和出口,统管企业对外的所有API出口.一般来 ...

最新文章

  1. 【译】Core Java Questions and Answers【1-33】
  2. 单链表的几个基本操作
  3. RedHat下建立群集
  4. Java蓝牙电话_Android mediaPlayer和蓝牙汽车/耳机电话
  5. ESP32启明云端又有新玩法|基于ESP32+热像仪传感的物联网非接触智能测温终端为高考护航了
  6. Android RecyclerView 向上偏移解决、添加自定义分割线,瀑布流,ScrollView嵌套RecyclerView滑动卡顿
  7. php 添加音乐,PHP网站插入音乐
  8. 6-SqlMapConfig.xml配置文件
  9. Linux学习之 vi编辑器常用命令
  10. C#物联网平台服务器框架源码
  11. 5.8G雷达感应模块,微波雷达传感器技术,人体存在感应雷达
  12. java秀恩爱代码_Java版给爱人表白的玫瑰花程序代码
  13. 计算机网络(2.11)物理层- 宽带接入技术-光纤同轴混合网 (HFC网)
  14. 关于nifty counters
  15. 利用python进行识别相似图片(一)
  16. 区块链应用在网络安全的六个案例
  17. [ JAVA ] 共有前缀
  18. 网罗天下 v1.0 下载
  19. 百度语音合成模型Deep Voice3
  20. 多层感知机总结-PyTorch

热门文章

  1. Java常用开发软件下载地址
  2. 阿里云修改主机名hostname
  3. 钢管热处理市场现状研究分析-
  4. 创新型封基破解折价难题
  5. 【go】golang中置new()函数和make()函数的区别
  6. OSError: [WinError 87]参数错误
  7. 管理启示:“幸福的小狐狸”
  8. Linux下 C 遍历目录(opendir,readdir函数)
  9. JavaSE -IO流
  10. 毕业四个月,一个初出校门的程序员的生活现状