微服务网关Gateway基本知识(一)
1、Spring Cloud GateWay 基本知识网关作为流量的入口,常用的功能包括路由转发,权限校验,限流等。Spring Cloud GateWay是Cloud官方推出的第二代网关框架,定位取代NetFilx Zuul,与Zuul相比较,Gateway能提供更优秀的性能,更强大的功能。Gateway是基于WebFlux+Netty+Reactor实现的响应式的API网关。Gateway不能
·
1、Spring Cloud GateWay 基本知识
网关作为流量的入口,常用的功能包括路由转发,权限校验,限流等。
Spring Cloud GateWay是Cloud官方推出的第二代网关框架,定位取代NetFilx Zuul,与Zuul相比较,Gateway能提供更优秀的性能,更强大的功能。
Gateway是基于WebFlux+Netty+Reactor实现的响应式的API网关。Gateway不能在传统的servlet容器中工作,也不能构建成war包。
Gateway旨在为微服务架构提供一种简单有效的API路由的管理方式,并且基于Filter提供基本的网关功能,例如:安全认证,限流,监控。
1.1Gateway核心概念
- 路由(route)
路由是网关中最基础的一部分,路由包括一个id,url,一组断言工厂,一组filter组成。断言为true,则URL和和配置的路由相匹配。 - 断言(predicates)
Java8中的断言函数,Gateway中的断言函数是spring5框架中的的ServerWebExchange。
ServerWebExchange: ServerWebExchange是一个HTTP请求-响应交互的契约。提供对HTTP请求和响应的访问,并公开额外的服务器端处理相关属性和特性,如请求属性。其实,ServerWebExchange命名为服务网络交换器,存放着重要的请求-响应属性、请求实例和响应实例等等,有点像Context的角色。
断言函数允许开发者去定义匹配Http request中的请求头等参数信息。 - 过滤器(filter)
Gateway中的filter分为Gateway Filter和Global Filter。Filter 可以对请求和响应进行处理。
1.2Gateway工作原理
Gateway的工作原理和Zuul的相差不大。但Gateway的filter只有pre和post两种。
客户端想向Gateway发送请求,如果请求和网关中定义的路由匹配,则该请求就回发送到网关Web处理器,此时处理器程序运行特定的请求过滤链。
过滤器之间用虚线分开的原因是过滤器可能会在发送代理请求的前后执行逻辑。所有pre过滤器逻辑先执行,然后执行代理请求,代理请求执行后,执行post过滤器请求。
2. Spring Cloud Gateway快速开始
2.1环境搭建
1)引入依赖
<!-- gateway网关 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
<!-- nacos服务注册与发现 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
- 注意:Gateway会和spring-webmvc的依赖产生冲突,需要排除spring-webmvc
- 排除可以参考
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
</exclusion>
</exclusions>
</dependency>
2)编写yml配置文件
server:
port: 8888
spring:
application:
name: mall-gateway
#配置nacos注册中心地址
cloud:
nacos:
discovery:
server-addr: 10.102.59.97:8848
gateway:
discovery:
locator:
# 默认为false,设为true开启通过微服务创建路由的功能,即可以通过微服务名访问服务
# http://localhost:8888/mall-order/order/findOrderByUserId/1
enabled: true
# 是否开启网关
enabled: true
3)测试
- Gateway推荐我们不开启网关,一方面是为了安全,另一方面没有必要暴露给前端服务名称。默认是false。
更多推荐
已为社区贡献1条内容
所有评论(0)