一、为什么选择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对比

最新文章

  1. SCCM 2012 R2安装部署过程和问题(三)
  2. .Net程序员之Python基础教程学习----字符串的使用 [Second Day]
  3. touch 命令
  4. SPOJ #2 Prime Generator
  5. Jenkins-测试自动化环境搭建(Python+RobotFramework+selenium)
  6. HDU 5522 Numbers 暴力
  7. magic Ajax使用以及注意事项
  8. Riak VClock
  9. SQL SERVER 查看日志大小及日志已满的处理方法 (转)
  10. 【Python】 迭代器&amp;生成器
  11. 5. Web vulnerability scanners (网页漏洞扫描器 20个)
  12. MySql共享锁和排它锁
  13. servlet篇 之servlet实现
  14. 如何将frm文件导入MySql数据库
  15. Online DDL工具的安装与使用
  16. office2013安装和破解教程
  17. leetCode题解单链表反转
  18. calayer 的特殊属性整理
  19. Oracle11gR2--手工建库&amp;dbca建库
  20. Python基础-2

热门文章

  1. 08 . Jenkins之SpringCloud微服务+Vue+Docker持续集成
  2. Code Test(1)
  3. 1. Spring Boot入门
  4. OpenCV计算机视觉学习(2)——图像算术运算 &amp; 掩膜mask操作(数值计算,图像融合,边界填充)
  5. Arduino control Eeprom by IIC method of using device address in Arduino
  6. C++中cstring.h和string.h的区别
  7. 题解 P3572 [POI2014]PTA-Little Bird
  8. 从零开始针对 .NET 应用的 DevOps 运营实践 - 运行环境搭建
  9. Docker笔记4:在 CentOS 上安装 Docker
  10. IOS使用UITextView进行富文本编辑|纯干货