概述
1. 什么是gateway,它可以起到什么样的作用?
gateway是spring cloud提供的网关技术,提供功能如下:路由,安全,监控/埋点,限流
gateway中的核心元素:
route:路由,为请求匹配到对应的路由
predicate:java8提供的一个函数,是路由的匹配条件
filter:过滤器,在请求发出前后进行一些业务上的处理
原理图:
过程:客户端请求 -> Gateway Handler Mapping -> Gateway Web Handler -> 前置过滤器链 -> 发出请求 -> 后置过滤器链
2. gateway作为网关的一种,它相对其它网管的优势在哪里?
优点:简单易用,维护性强
缺点:性能相对zuul2,openrestry,nginx,kong来说是最差的
网关选型:轻量级的网关系统还是选gateway,出现性能瓶颈可以通过多加几台服务器的方式解决。
参考博文:
https://www.cnblogs.com/cat520/articles/10102762.html
https://www.zhihu.com/question/280850489/answer/909248442
不使用kong,openrestry作为网关的原因?
增加项目的复杂度,像openrestry使用的是lua脚本开发的。鉴权,监控都使用lua开发,增加项目的难度。
不使用zuul2的原因?没有文档,高并发时出错率较高
3. gateway如何实现路由转发的功能?
通过在application.property添加配置的方式就可以做到
predicates:用于匹配的路径
url:转发到的路径
StripPrefix=4:省略4段路径,例,/pacz_core/do/app/pacz-customer/**省略为/**
PrefixPath=/pacz-customer:添加前缀/pacz-customer,最后的path为:/pacz-customer/**
加上uri,最后的请求url为:http://pacz-core-customer-stg11.paic.com.cn/pacz-customer/**
例:
spring.cloud.gateway.routes[7].id=route7 spring.cloud.gateway.routes[7].predicates[0]=Path=/pacz_core/do/app/pacz-customer/** spring.cloud.gateway.routes[7].uri=http://pacz-core-customer-stg11.paic.com.cn spring.cloud.gateway.routes[7].filters[0]=StripPrefix=4 spring.cloud.gateway.routes[7].filters[1]=PrefixPath=/pacz-customer
原理:
使用gateway中的断言工厂实现,上述的例子使用的是path断言工厂实现,这只是多种断言方式中的一种,其它的如下
Query路由断言工厂:通过请求的参数进行匹配
Method路由断言工厂:HTTP请求方式进行匹配
Header路由断言工厂:通过请求头中的key,value进行匹配
当然也可以定义自己的断言工厂,继承AbstractRoutePredicateFactory, 重写apply方法。具体可参考网络上的其它资源。
3. gateway如何实现接口限流?
gateway中的接口限流的方式十分简单:定义bean对象+application.property文件中配置限流信息
定义bean对象:定义的bean对象为KeyResolver, 限流的颗粒度可以为:ip地址,用户id,某些接口
例如:
//这里是通过请求中的hostname进行限流的,当然可以换成其它的 @Configuration public class BeanConfig { @Bean public KeyResolver ipKeyResolver() { return exchange -> Mono.just(exchange.getRequest().getRemoteAddress().getHostName()); } }
filter的name必须是RequestRateLimiter replenishRate:每秒钟生成的令牌数 burstCapacity:每秒中最多消耗的令牌数 key-resolver:使用sqEL方式引用bean filters: - name: RequestRateLimiter args: redis-rate-limiter.replenishRate: 10 redis-rate-limiter.burstCapacity: 20 key-resolver: "#{@ipKeyResolver}"
4. gateway如何实现接口熔断?
通过配置全局过滤器+apollo配置的方式,可以实现热部署的接口熔断配置
全局过滤器通过实现GlobalFilter,Order接口,并重写filter方法
5. gateway如何实现接口降级?
6. gateway的项目实践。
最后
以上就是专注小猫咪为你收集整理的SpringCloud-Gateway介绍的全部内容,希望文章能够帮你解决SpringCloud-Gateway介绍所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复