springcloud Gateway网关

文章目录

  • 代码下载地址
  • 概述简介
    • 三大核心概念
  • 配置
      • 测试
    • 可以配置类代替yml
  • 动态路由
      • 测试
  • Predicate的使用
  • Filter的使用
    • 简介
    • 自定义filter

代码下载地址

地址:https://github.com/13thm/study_springcloud/tree/main/days9_Gateway

概述简介

Gateway是在Spring生态系统之上构建的API网关服务,基于Spring 5,Spring Boot 2和 Project Reactor等技术。

Gateway旨在提供一种简单而有效的方式来对API进行路由,以及提供一些强大的过滤器功能, 例如:熔断、限流、重试等

pringCloud Gateway 是 Spring Cloud 的一个全新项目,基于 Spring 5.0+Spring Boot 2.0 和 Project Reactor 等技术开发的网关,它旨在为微服务架构提供一种简单有效的统一的 API 路由管理方式。
SpringCloud Gateway 作为 Spring Cloud 生态系统中的网关,目标是替代 Zuul,在Spring Cloud 2.0以上版本中,没有对新版本的Zuul 2.0以上最新高性能版本进行集成,仍然还是使用的Zuul 1.x非Reactor模式的老版本。而为了提升网关的性能,SpringCloud Gateway是基于WebFlux框架实现的,而WebFlux框架底层则使用了高性能的Reactor模式通信框架Netty。
Spring Cloud Gateway的目标提供统一的路由方式且基于 Filter 链的方式提供了网关基本的功能,例如:安全,监控/指标,和限流。

三大核心概念

Route(路由):路由是构建网关的基本模块,它由ID,目标URI,一系列的断言和过滤器组成,如果断言为true则匹配该路由
Predicate(断言):参考的是Java8的java.util.function.Predicate 开发人员可以匹配HTTP请求中的所有内容(例如请求头或请求参数),如果请求与断言相匹配则进行路由.
Filter(过滤): 指的是Spring框架中GatewayFilter的实例,使用过滤器,可以在请求被路由前或者之后对请求进行修改。

Gateway工作流程:路由转发+执行过滤器链

配置

  1. 新建Module:cloud-gateway-gateway9527
  2. 写POM
  3. 写yml
  4. 主启动类

测试

启动7001,启动8001,启动9527网关
添加网关前

http://localhost:8001/payment/get/1

springcloud Gateway网关_第1张图片

添加网关后

http://localhost:9527/payment/get/1

springcloud Gateway网关_第2张图片

可以配置类代替yml

http://news.baidu.com/guonei

用自己的网关访问百度新闻,百度国内新闻网址,需要外网
通过9527网关访问到外网的百度新闻网址
在9527项目 建立package config 写配置类(具体看下载代码)

当访问地址 http://localhost:9527/guonei时会自动转发到地址:http://news.baidu.com/guonei
springcloud Gateway网关_第3张图片

动态路由

springcloud Gateway网关_第4张图片
默认情况下Gateway会根据注册中心注册的服务列表,以注册中心上微服务名为路径创建动态路由进行转发,从而实现动态路由的功能.
**启动:**一个eureka7001 + 两个服务提供者8001/8002
修改9527项目的yml

springcloud Gateway网关_第5张图片

测试

http://localhost:9527/payment/lb

springcloud Gateway网关_第6张图片
springcloud Gateway网关_第7张图片
完成了轮流切换

Predicate的使用

时间前后或者在时间之间设置.

  1. After Route Predicate
  2. Before Route Predicate
  3. Between Route Predicate
    举例:
    yml里面设置:
    springcloud Gateway网关_第8张图片

Cookie Route Predicate (cookie设置)

- Cookie=username,java        # 断言设置cookie
Cookie Route Predicate需要两个参数,一个是 Cookie name ,一个是正则表达式。
路由规则会通过获取对应的 Cookie name 值和正则表达式去匹配,如果匹配上就会执行路由,如果没有匹配上则不执行

springcloud Gateway网关_第9张图片
测试
不带cookie

curl http://localhost:9527/payment/lb

springcloud Gateway网关_第10张图片

带上cookie

curl http://localhost:9527/payment/lb --cookie "username=java"

在这里插入图片描述

Header Route Predicate(请求头设置)
springcloud Gateway网关_第11张图片

- Header=X-Request-Id, \d+  # 请求头要有X-Request-Id属性并且值为整数的正则表达式

测试:

curl http://localhost:9527/payment/lb -H "X-Request-Id:123"

在这里插入图片描述

curl http://localhost:9527/payment/lb -H "X-Request-Id:sss"

springcloud Gateway网关_第12张图片

Host Route Predicate

Host=**.test.com

springcloud Gateway网关_第13张图片
测试:
正确:curl http://localhost:9527/payment/lb -H "Host: java.test.com"
在这里插入图片描述

错误:curl http://localhost:9527/payment/lb -H "Host: java.test.net"
springcloud Gateway网关_第14张图片

Method Route Predicate

- Method=GET

springcloud Gateway网关_第15张图片
在这里插入图片描述

Path Route Predicate

Path=/payment/lb/**         # 断言,路径相匹配的进行路由

springcloud Gateway网关_第16张图片

Query Route Predicate

- Query=username, \d+  # 要有参数名username并且值还要是整数才能路由

springcloud Gateway网关_第17张图片
正确:curl http://localhost:9527/payment/lb?username=31

错误:curl http://localhost:9527/payment/lb?username=-31

Filter的使用

简介

路由过滤器可用于修改进入的HTTP请求和返回的HTTP响应,路由过滤器只能指定路由进行使用。

Spring Cloud Gateway 内置了多种路由过滤器,他们都由GatewayFilter的工厂类来产生
官网:https://docs.spring.io/spring-cloud-gateway/docs/3.0.8/reference/html/#gatewayfilter-factories

springcloud Gateway网关_第18张图片
filter 过滤器看一下官网,写的比较多

自定义filter

建一个package filter 写过滤器(具体看下载代码)

正确的:
http://localhost:9527/payment/lb?uname=z3

springcloud Gateway网关_第19张图片

错误的:
http://localhost:9527/payment/lb

springcloud Gateway网关_第20张图片

你可能感兴趣的:(springcloud,spring,cloud,gateway,java)