springcloud Gateway网关

代码下载地址

地址: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

在这里插入图片描述

添加网关后

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

在这里插入图片描述

可以配置类代替yml

http://news.baidu.com/guonei

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

当访问地址 http://localhost:9527/guonei时会自动转发到地址:http://news.baidu.com/guonei
在这里插入图片描述

动态路由

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

在这里插入图片描述

测试

http://localhost:9527/payment/lb

在这里插入图片描述
在这里插入图片描述
完成了轮流切换

Predicate的使用

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

  1. After Route Predicate
  2. Before Route Predicate
  3. Between Route Predicate
    举例:
    yml里面设置:
    在这里插入图片描述

Cookie Route Predicate (cookie设置)

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

在这里插入图片描述
测试
不带cookie

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

在这里插入图片描述

带上cookie

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

在这里插入图片描述

Header Route Predicate(请求头设置)
在这里插入图片描述

- 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"

在这里插入图片描述

Host Route Predicate

Host=**.test.com

在这里插入图片描述
测试:
正确:curl http://localhost:9527/payment/lb -H "Host: java.test.com"
在这里插入图片描述

错误:curl http://localhost:9527/payment/lb -H "Host: java.test.net"
在这里插入图片描述

Method Route Predicate

- Method=GET

在这里插入图片描述
在这里插入图片描述

Path Route Predicate

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

在这里插入图片描述

Query Route Predicate

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

在这里插入图片描述
正确: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

在这里插入图片描述
filter 过滤器看一下官网,写的比较多

自定义filter

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

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

在这里插入图片描述

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

在这里插入图片描述

  • 16
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值