我是靠谱客的博主 专注小猫咪,最近开发中收集的这篇文章主要介绍SpringCloud-Gateway介绍,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

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介绍所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(64)

评论列表共有 0 条评论

立即
投稿
返回
顶部