SpringCloud之Gateway
一、为什么选择SpringCloud Gateway而不是Zuul?
Gateway和Zuul的职责一样,都承担着请求分发,类似Nginx分发到后端服务器。
1.SpingCloud Gateway 和SpringCloud Zuul对比分析
(1)相同点
- 底层都是servlet
- 两者均是web网关,处理的是http请求
(2)不同点
a.内部实现
gateway对比zuul多依赖了spring-webflux,在spring的支持下,功能更强大,内部实现了限流、负载均衡等,扩展性也更强,但同时也限制了仅适合于Spring Cloud套件;
zuul则可以扩展至其他微服务框架中,其内部没有实现限流、负载均衡等。
b.是否支持异步
zuul仅支持同步;
gateway支持异步(理论上gateway则更适合于提高系统吞吐量(但不一定能有更好的性能),最终性能还需要通过严密的压测来决定)。
c.框架设计的角度
gateway具有更好的扩展性,并且其已经发布了2.0.0的RELESE版本,稳定性也是非常好的。
d.性能
Zuul和Gateway哪个性能更好,有朋友特别做了测试并写下了文章:
微服务网关选型:spring cloud gateway、zuul 1性能对比测试
e.限流
Zuul2:可通过配置文件或者filter实现;
Gateway:可对IP、用户、集群进行限流,并提供扩展接口。
f.鉴权
Zuul2:filter中代码实现;
Gateway:普通鉴权、auth2.0。
g.监控
Zuul2:filter中代码实现;
Gateway:Gateway Metrics Filter实现。
h.易用性
Zuul2:参考较少;
Gateway:简单易用。
(3)架构图
a.Zuul2内部架构图

b.Gateway内部架构图

2.究竟该选Gateway还是Zuul?
我的看法是结合业务场景和实际情况。比方说,如果是一个新的项目可以采用Gateway,如果是二次开发某个项目,而那个项目网关用的是Zuul,建议不要改,保持现状,直到真正搞懂了那个项目和框架底层,可以尝试试验换(最终换不换在于换的成本有多高,如果太高的话,还是不要换)。
二、SpringCloud整合Gateway
1.导入Maven依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
2.配置文件
server:
port: 8080 spring:
cloud:
gateway:
discovery:
locator:
lowerCaseServiceId: true
enabled: true
routes:
# 认证中心
- id: blog-api
uri: lb://blog-api
predicates:
- Path=/api/**
filters:
- StripPrefix=1 application:
name: blog-gateway-server eureka:
client:
serviceUrl:
defaultZone: http://localhost:8761/eureka/
3.启动并测试
整合其实非常简单,关键在于两个:
第一,SpringCloud和SpringBoot版本要兼容;
第二,配置文件要对,否则会遇到这样的问题,能够正常启动,但是通过网关访问不到下面的微服务。
我的测试效果,如图:
如果有朋友对Zuul感兴趣,可以参考我的这篇文章:
SpringCloud之Zuul
本文参考资料如下:
微服务网关Zuul和Gateway的区别
SpringCloud Gateway 新网关与zuul的对比选型
微服务网关选型:spring cloud gateway、zuul 1性能对比测试
Zuul和Gateway对比
SpringCloud之Gateway的更多相关文章
- 【SpringCloud】Gateway 配置全局过滤器获取请求参数和响应值
[SpringCloud]Gateway 配置全局过滤器获取请求参数和响应值 实现Ordered接口getOrder()方法,数值越小越靠前执行,记得这一点就OK了. 获取请求参数RequestBod ...
- 微服务SpringCloud之GateWay路由
在前面博客学习了网关zuul,今天学下spring官方自带的网关spring cloud gateway.Zuul(1.x) 基于 Servlet,使用阻塞 API,它不支持任何长连接,如 WebSo ...
- springcloud中gateway的实际应用
之前我一直用的是Zuul网关,用过gateway以后感觉比Zuul功能还是强大很多. Spring Cloud Gateway是基于Spring5.0,Spring Boot2.0和Project R ...
- springcloud zookeeper+gateway
搭建springcloud项目的时候以 zookeeper为注册中心 gateway为路由 启动时出现以下报错: ****************************************** ...
- SpringCloud实战 | 第四篇:SpringCloud整合Gateway实现API网关
一. 前言 微服务实战系列是基于开源微服务项目 有来商城youlai-mall 版本升级为背景来开展的,本篇则是讲述API网关使用Gateway替代Zuul,有兴趣的朋友可以进去给个star,非常感谢 ...
- springcloud组件gateway断言(Predicate)
Spring Cloud Gateway是SpringCloud的全新子项目,该项目基于Spring5.x.SpringBoot2.x技术版本进行编写,意在提供简单方便.可扩展的统一API路由管理方式 ...
- SpringCloud创建Gateway模块
1.说明 本文详细介绍Spring Cloud创建Gateway模块的方法, 基于已经创建好的Spring Cloud父工程, 请参考SpringCloud创建项目父工程, 和已经创建好的Eureka ...
- 深入理解SpringCloud之Gateway
虽然在服务网关有了zuul(在这里是zuul1),其本身还是基于servlet实现的,换言之还是同步阻塞方式的实现.就其本身来讲它的最根本弊端也是再此.而非阻塞带来的好处不言而喻,高效利用线程资源进而 ...
- 微服务SpringCloud之GateWay服务化和过滤器
Spring Cloud Gateway 提供了一种默认转发的能力,只要将 Spring Cloud Gateway 注册到服务中心,Spring Cloud Gateway 默认就会代理服务中心的所 ...
随机推荐
- SPI通信基础学习
SPI是"Serial Peripheral Interface"的缩写,即"串行外设接口",是摩托罗拉公司推出的一种串行接口通信协议. 接线的示意图: SPI ...
- Django ORM 引发的数据库 N+1 性能问题
背景描述 最近在使用 Django 时,发现当调用 api 后,在数据库同一个进程下的事务中,出现了大量的数据库查询语句.调查后发现,是由于 Django ORM 的机制所引起. Django Obj ...
- 浅谈Samsung Exynos4412处理器
转载于:http://www.cnblogs.com/android210/archive/2013/01/16/2862349.html Topic:浅谈Samsung Exynos4412处理器( ...
- 网站搭建-云服务器ECS的使用
1. 查看购买的云服务器实例,重置密码 2. 查找IP进行查看,此时网页时不存在的,开始配置: 3. 登录putty或其他终端,进行网页搭建,先按教程走一遍,然后再做个性化处理: #安装Apache ...
- rs485转以太网转换器
rs485转以太网转换器ZLAN5103 实现RS485转以太网(即485转网口)主要一个硬件转换器和一个软件驱动.硬件转换器分为两种:串口服务器(串口联网服务器.串口通信服务器).串口联网模块.RS ...
- Error:(4, 17) java: 程序包org.junit不存在
内容:Error:(4, 17) java: 程序包org.junit不存在 场景:运行测试类的时候,IED新建一个自己的项目,并且不用maven的情况下 解决方案:File -> Projec ...
- date命令之移动修改日志日期
[16:19:50 root@C8[ 2020-06-16DIR]#touch app.log [16:21:25 root@C8[ 2020-06-16DIR]#ll total 0 -rw-r-- ...
- 安装 Linux 系统基础知识概要
虚拟化软件,建议使用 Vmware Workstation 虚拟硬件配置CPU:2核或更多内存:1G以上,推荐2G硬盘:一块硬盘,200G (虚拟大小)网卡:NAT模式 (桥接在外部网络变化时,无法访 ...
- ES5新增数组的方法
ES5新增数组的方法 ES5新增数组常见方法(indexOf/forEach/map/filter/some/every) .indexOf( data , start) 检测数组中是否存在指定数据 ...
- 使用ML.NET模型生成器来完成图片性别识别
什么是ML.NET? ML.NET 使你能够在联机或脱机场景中将机器学习添加到 .NET 应用程序中. 借助此功能,可以使用应用程序的可用数据进行自动预测. 机器学习应用程序利用数据中的模式来进行预测 ...