SpringCloudGateWay几种常用配置

454 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第11天,点击查看活动详情

Spring Cloud Gateway

springcloud的网关相当于门户的作用,所以对于整个微服务来说都是非常重要的,这里列举几种常用的网关配置

鉴权、限流、日志、缓存

image-20221004195036934

image-20221004195923325

1)基本使用

1、依赖

image-20221004195944978

2、配置

image-20221004200057657

下面是路由

image-20221004200323247

url和uri的区别

我们从名字上看

统一资源标识符(Uniform Resource Identifier, URI):是一个用于标识某一互联网资源名称的字符串。 统一资源定位符(Uniform Resource Locator, URL):是一个用于标识和定位某一互联网资源名称的字符串。

可能大家就比较困惑了,这俩好像是一样的啊?那我们就类比一下我们现实生活中的情况: 我们要找一个人——张三,我们可以通过他的唯一的标识来找,比如说身份证,那么这个身份证就唯一的标识了一个人,这个身份证就是一个 URI; 而要找到张三,我们不一定要用身份证去找,我们还可以根据地址去找,如 在清华大学18号宿舍楼的404房间第一个床铺的张三,我们也可以唯一确定一个张三, 动物住址协议://地球/中国/北京市/清华大学/18号宿舍楼/404号寝/张三.人。而这个地址就是我们用于标识和定位的 URL。 我们从上面可以很明显的看出,URI 通过任何方法标识一个人即可,而 URL 虽然也可以标识一个人,但是它主要是通过定位地址的方法标识一个人,所以 URL 其实是 URI 的一个子集,即 URL 是靠标识定位地址的一个 URI。

image-20221004201030226

image-20221004201015732

有很多种断言机制

image-20221004202610560

比如:

这个会复合,都满足条件才会放行

image-20221004202948198

image-20221004203113428

如果没有想要的,也可以自定义路由!

这里自定义一个:

image-20221004204941965

image-20221004204753016

image-20221004205045821

(快捷键就是配置类里拦截路由的字段)

2)过滤器

image-20221004205510505

image-20221017185423874

比如这个:

image-20221017185535483

请求经过filter的时候会在请求上面加个参数

(下图第二种写法)

写法:

数组的形式:

image-20221017192013397

限流的写法

image-20221017191429003

基于Redis的令牌桶实现 (所以这么写肯定要连接Redis!!!)

基本的两个参数

replenishRate:令牌桶的填充速度

burstCapacity:令牌桶的容量

其他参数可以自定义:

比如对ip地址限流可以新增一个IpAdd ressKeyResolver:

image-20221017191819785

重试写法

image-20221017192238329

image-20221017194654157

image-20221017194728519

自定义

image-20221017194849418

image-20221017195138840

image-20221017194949906

image-20221017195013899

配置:

image-20221017195101483

image-20221017195302147

全局过滤器

image-20221017195408197

3)负载均衡

要先注册到Eureka:

image-20221017203221744

IDEA同一个测试类开启多个端口的方法:

image-20221017201445819

注意这个如果是服务的配置是部署在仓库的端口配置会被覆盖掉...

负载均衡加个节点就行:

image-20221017202433920

image-20221017202728996

image-20221017202750765

4)动态路由

之前的配置都是写死的:

image-20221017202943225

image-20221017203157177

springboot提供了一些api,暴露出去是十分危险的!

image-20221017203254078

actuator endpoint,可以提供一些监控一些cloud的东西

image-20221017203443825

image-20221017203924620

也可以通过一些api实现创建和删除节点:

image-20221017205849058

image-20221017210326217

需要刷新:

image-20221017210147832

有好处也有坏处,坏处:没有持久化(服务重启之后,使用api构造的节点都会消失)

如何实现持久化?

将配置放到数据库(Redis)中

image-20221017211034204

image-20221017211243959

@Component

image-20221017215404732

image-20221017215710923

image-20221017215816158

分析:如何实现的?

静态路由和动态路由的管理其实都一样,知识数据来源不一样

都存储在:

image-20221017220254733

自动装载

image-20221017222527030

里有:

image-20221017222508010

image-20221017222049136

RouteDefinitionLocator有多个实现:

image-20221017222208386

image-20221017222628655

包装再包装,非常复杂

或者对接到配置中心,都是可以的,基于api