关于java:api网关介绍

35次阅读

共计 3093 个字符,预计需要花费 8 分钟才能阅读完成。

1. 什么是网关

API 网关是一个零碎的惟一入口。
是泛滥分布式服务惟一的一个进口。
它做到了物理隔离, 内网服务只有通过网关能力裸露到外网被他人拜访。
简而言之: 网关就是你家的大门

2. 提供了哪些性能

  1. 身份认证 (oauth2/jwt)
  2. 权限平安 (黑白名单 / 爬虫管制)
  3. 流量管制 (申请大小 / 速率)
  4. 数据转换 (公共申请 request/response)
  5. 监控 /metrics
  6. 跨域问题 (前后端拆散)
  7. 灰度公布 (金丝雀公布 / 一部分去老客户端 / 一部分去新客户端)

3. 市面上有哪些比拟好的开源网关

  1. OpenResty
  2. kong
  3. Spring Cloud Zuul/Gateway
  4. Zuul2
网关 限流 鉴权 监控 易用性 可维护性 成熟度
Spring Cloud Gateway 能够通过 IP,用户,集群限流,提供了相应的接口进行扩大 一般鉴权、auth2.0 Gateway Metrics Filter 简略易用 spring 系列可扩大强,易配置 可维护性好 spring 社区成熟,但 gateway 资源较少
Zuul2 能够通过配置文件配置集群限流和单服务器限流亦可通过 filter 实现限流扩大 filter 中实现 filter 中实现 参考资料较少 可维护性较差 开源不久,材料少
OpenResty 须要 lua 开发 须要 lua 开发 须要开发 简略易用,然而须要进行的 lua 开发很多 可维护性较差,未来须要保护大量 lua 脚本 很成熟材料很多
Kong 依据秒,分,时,天,月,年,依据用户进行限流。可在原码的根底上进行开发 一般鉴权,Key Auth 鉴权,HMAC,auth2.0 可上报 datadog,记录申请数量,申请数据量,应答数据量,接管于发送的工夫距离,状态码数量,kong 内运行工夫 简略易用,api 转发通过管理员接口配置,开发须要 lua 脚本 “ 可维护性较差,未来须要保护大量 lua 库 绝对成熟,用户问题汇总,社区,插件开源

4. 如何做一款网关 (Spring Cloud Gateway)

  1. 第一个网关
    pom.xml
<dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>

Application.java

@SpringBootApplication
public class GatewayApplication {public static void main(String[] args) {SpringApplication.run(GatewayApplication.class, args);
    }
    
    // 等同于在 yml 文件中的配置
    @Bean
    public RouteLocator customRouteLocator(RouteLocatorBuilder builder) {return builder.routes().route(r -> r.path("/test/aa")
                .uri("http://www.baidu.com"))
                .route(r -> r.path("/baidu")
                        .uri("http://www.baidu.com"))
                .route(r -> r.path("/testa/**")
                        .uri("lb://servicea"))
                .build();}
}

启动参数 反对的路由形式

Loaded RoutePredicateFactory [After]
2020-06-12 11:39:21.811  INFO 3680 --- [main] o.s.c.g.r.RouteDefinitionRouteLocator    : Loaded RoutePredicateFactory [Before]
2020-06-12 11:39:21.811  INFO 3680 --- [main] o.s.c.g.r.RouteDefinitionRouteLocator    : Loaded RoutePredicateFactory [Between]
2020-06-12 11:39:21.811  INFO 3680 --- [main] o.s.c.g.r.RouteDefinitionRouteLocator    : Loaded RoutePredicateFactory [Cookie]
2020-06-12 11:39:21.811  INFO 3680 --- [main] o.s.c.g.r.RouteDefinitionRouteLocator    : Loaded RoutePredicateFactory [Header]
2020-06-12 11:39:21.812  INFO 3680 --- [main] o.s.c.g.r.RouteDefinitionRouteLocator    : Loaded RoutePredicateFactory [Host]
2020-06-12 11:39:21.812  INFO 3680 --- [main] o.s.c.g.r.RouteDefinitionRouteLocator    : Loaded RoutePredicateFactory [Method]
2020-06-12 11:39:21.812  INFO 3680 --- [main] o.s.c.g.r.RouteDefinitionRouteLocator    : Loaded RoutePredicateFactory [Path]
2020-06-12 11:39:21.812  INFO 3680 --- [main] o.s.c.g.r.RouteDefinitionRouteLocator    : Loaded RoutePredicateFactory [Query]
2020-06-12 11:39:21.812  INFO 3680 --- [main] o.s.c.g.r.RouteDefinitionRouteLocator    : Loaded RoutePredicateFactory [ReadBodyPredicateFactory]
2020-06-12 11:39:21.812  INFO 3680 --- [main] o.s.c.g.r.RouteDefinitionRouteLocator    : Loaded RoutePredicateFactory [RemoteAddr]
2020-06-12 11:39:21.812  INFO 3680 --- [main] o.s.c.g.r.RouteDefinitionRouteLocator    : Loaded RoutePredicateFactory [Weight]
2020-06-12 11:39:21.812  INFO 3680 --- [main] o.s.c.g.r.RouteDefinitionRouteLocator    : Loaded RoutePredicateFactory [CloudFoundryRouteService]

开启端点查看

拜访 url:
http://localhost:9002/actuato…

pom.xml 增加

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>

yml 增加配置 端点关上

management:
  endpoints:
    web:
      exposure:
        include: "*"

参考

代码地位:
https://github.com/jackssybin/springclouditems.git

本文由博客一文多发平台 OpenWrite 公布!

正文完
 0