小知识,大挑战!本文正在参与「程序员必备小知识」创作活动
本文已参与 「掘力星计划」 ,赢取创作大礼包,挑战创作激励金。
📖前言
1 | 复制代码心态好了,就没那么累了。心情好了,所见皆是明媚风景。 |
“一时解决不了的问题,那就利用这个契机,看清自己的局限性,对自己进行一场拨乱反正。”正如老话所说,一念放下,万般自在。如果你正被烦心事扰乱心神,不妨学会断舍离。断掉胡思乱想,社区垃圾情绪,离开负面能量。心态好了,就没那么累了。心情好了,所见皆是明媚风景。
🚓摘要
Spring Cloud Gateway
为 SpringBoot
应用提供了 API
网关支持,具有强大的智能路由与过滤器功能,本文将对其用法进行详细介绍。
SpringCloudGateway
是 SpringCloud
新推出的网关框架,比较于上一代 Zuul
,功能和性能有很大的提升。Zuul1.x
采用的是阻塞多线程方式,也就是一个线程处理一个连接请求,高并发情况下性能较差,即使是 Zuul2.x
虽然做到了非阻塞,但是面对连续跳票,看起来 Zuul
要被抛弃了。取而代之的是SpringCloudGateway
,SpringCloudGateway
是基于 Webflux
,是一个非阻塞异步的框架,性能上有很大提升,而且包含了 Zuul
的所有功能,可以从 Zuul
无缝切换到 SpringCloudGateway
1. Gateway
简介
Gateway
是在 Spring生态系统
之上构建的 API
网关服务,基于 Spring 5,Spring Boot 2和 Project Reactor
等技术。Gateway
旨在提供一种简单而有效的方式来对API
进行路由,以及提供一些强大的过滤器功能, 例如:熔断、限流、重试
等。
Spring Cloud Gateway
具有如下特性:
- 基于
Spring Framework 5, Project Reactor 和 Spring Boot 2.0
进行构建; - 动态路由:能够匹配任何请求属性;
- 可以对路由指定
Predicate(断言)和 Filter(过滤器)
; - 集成
Hystrix
的断路器功能; - 集成
Spring Cloud
服务发现功能; - 易于编写的
Predicate(断言)和 Filter(过滤器)
; - 请求限流功能;
- 支持路径重写。
2. 相关概念
- Route(路由):路由是构建网关的基本模块,它由ID,目标URI,一系列的断言和过滤器组成,如果断言为true则匹配该路由;
- Predicate(断言):指的是
Java 8
的Function Predicate
。 输入类型是Spring
框架中的ServerWebExchange
。 这使开发人员可以匹配HTTP请求中的所有内容,例如请求头或请求参数。如果请求与断言相匹配,则进行路由; - Filter(过滤器):指的是Spring框架中
GatewayFilter
的实例,使用过滤器,可以在请求被路由前后对请求进行修改。
3. 引入 gateway
依赖
在
pom.xml
中添加相关依赖(引入SpringCloudGateway
需要的POM
,记得引入actuator
组件,否则服务发现中心会认为服务不在线,导致网关无法路由到服务)
1 | xml复制代码<dependency> |
下面是我用到的依赖
1 | xml复制代码<?xml version="1.0" encoding="UTF-8"?> |
4. 启动类如下:
1 | java复制代码package com.cyj.dream.gateway; |
5. yml
配置
这里我只展示关于
gateway
的配置其他配置请自行处理
1 | yaml复制代码spring: |
6. 路由配置信息
我在路由里加了图片验证操作,各位可以自行查找添加进来
1 | java复制代码/** |
7. 路由限流
1 | java复制代码/** |
8. 网关配置
GatewayConfigProperties.java
网关配置文件
1 | java复制代码/** |
GatewayConfiguration.java
网关配置
1 | java复制代码/** |
8. filter拦截器配置
PasswordDecoderFilter
密码相关
1 | java复制代码/** |
全局拦截器,作用所有的微服务
- 对请求头中参数进行处理 from 参数进行清洗
- 重写StripPrefix = 1,支持全局
- 支持swagger添加X-Forwarded-Prefix header (F SR2 已经支持,不需要自己维护)
1 | java复制代码package com.cyj.dream.gateway.filter; |
token
验证过滤器
注意如果线上使用看下代码把本地注解注掉
1 | java复制代码/** |
9. 处理器
网关异常通用处理器,只作用在
webflux
环境下 , 优先级低于{@link ResponseStatusExceptionHandler}
执行
1 | java复制代码/** |
10. 简单说下–结果我就不验证了
这次的代码,涉及到了比较多的引入,我就没有一一放出来给到大家,如果想看源码就等等我发到
git吧,实际使用需要你去组合借鉴,切忌复制粘贴哦!!!!!!
PS:最近输出的文章以实用耐造为主,希望对你有所帮助而不是长篇大论全是理论实战弱鸡
,最后感谢大家耐心观看完毕,留个点赞收藏是您对我最大的鼓励!
🎉总结:
- 更多参考精彩博文请看这里:《陈永佳的博客》
- 喜欢博主的小伙伴可以加个关注、点个赞哦,持续更新嘿嘿!
本文转载自: 掘金