上一篇:如何基于Nacos集群部署方案? | 带你读《Spring Cloud Alibaba(2019)》之八
下一篇:Gateway怎样实现服务转发? | 带你读《Spring Cloud Alibaba(2019)》之十
本文来自于《精通Spring Cloud Alibaba》课程的整理,讲师为余胜军,点击查看视频内容。
本文系志愿者整理,供配合学习中心课程使用,不做商业用途。
SpringCloud Gateway
什么是微服务网关
微服务网关是整个微服务API请求的入口,可以实现过滤Api接口。
作用:可以实现用户的验证登录、解决跨域、日志拦截、权限控制、限流、熔断、负载均衡、黑名单与白名单机制等。
微服务中的架构模式采用前后端分离,前端调用接口地址都能够被抓包分析到。
在微服务中,我们所有的企业入口必须先经过Api网关,经过Api网关转发到真实的服务器中。
如果此时需要添加验证会话信息:
传统的方式我们可以使用过滤器拦截用户会话信息,这个过程所有的服务器都必须写入该验证会话登录的代码。
过滤器与网关的区别
过滤器适合于单个服务实现过滤请求;
网关拦截整个的微服务实现过滤请求,能够解决整个微服务中冗余代码。
过滤器是局部拦截,网关实现全局拦截。
Zuul与Gateway有哪些区别
Zuul网关属于netfix公司开源的产品,属于第一代微服务网关
Gateway属于SpringCloud自研发的网关框架,属于第二代微服务网关
相比来说SpringCloudGateway性能比Zuul性能要好:
注意:Zuul网关底层基于Servlet实现的,阻塞式的Api,不支持长连接。
SpringCloudGateway基于Spring5构建,能够实现响应式非阻塞式的Api,支持长连接,能够更好的整合Spring体系的产品,依赖SpringBoot-WebFux。
Gateway环境快速搭建
新建一个项目:mayikt-gateway
此时需要引入依赖:
Maven依赖:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.0.RELEASE</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
<version>2.0.0.RELEASE</version>
</dependency>
</dependencies>
在此依赖上加入一个依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
此时程序是否会报错呢?我们来接着进行配置,之后看结果
application配置:
server:
port: 80
####服务网关名称
spring:
application:
name: mayikt-gateway
cloud:
gateway:
discovery:
locator:
####开启以服务id去注册中心上获取转发地址
enabled: true
###路由策略
routes:
###路由id
- id: mayikt
####转发http://www.mayikt.com/
uri: http://www.mayikt.com/
###匹配规则
predicates:
- Path=/mayikt/**
### 127.0.0.1/mayikt 转发到http://www.mayikt.com/
在我们需要服务名称获取地址的情况下,这个一定要设置为true。但现在我们并不需要,所以可以不需要它。
关于匹配规则,默认设为false。
网关的服务端口号一般是:80或者443
这个配置所表示的是:
127.0.0.1/mayikt 转发到http://www.mayikt.com/
uri: http://www.mayikt.com/ 去掉末尾的“/”,uri: http://www.mayikt.com
之后我们操作来运行一下
此时执行结果如下:
程序出错了,最主要的原因是gateway不依赖于serverlet,所以我们需要去掉之前添加的依赖。
之后再次运行,执行结果如下:
与蚂蚁课堂的404页面一致,是因为CSS页面都是静态的,所以为了避免这种错误,我们一般都需要在最后加上“/”。
执行结果: