一、为什么选择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的更多相关文章

  1. 【SpringCloud】Gateway 配置全局过滤器获取请求参数和响应值

    [SpringCloud]Gateway 配置全局过滤器获取请求参数和响应值 实现Ordered接口getOrder()方法,数值越小越靠前执行,记得这一点就OK了. 获取请求参数RequestBod ...

  2. 微服务SpringCloud之GateWay路由

    在前面博客学习了网关zuul,今天学下spring官方自带的网关spring cloud gateway.Zuul(1.x) 基于 Servlet,使用阻塞 API,它不支持任何长连接,如 WebSo ...

  3. springcloud中gateway的实际应用

    之前我一直用的是Zuul网关,用过gateway以后感觉比Zuul功能还是强大很多. Spring Cloud Gateway是基于Spring5.0,Spring Boot2.0和Project R ...

  4. springcloud zookeeper+gateway

    搭建springcloud项目的时候以 zookeeper为注册中心  gateway为路由 启动时出现以下报错: ****************************************** ...

  5. SpringCloud实战 | 第四篇:SpringCloud整合Gateway实现API网关

    一. 前言 微服务实战系列是基于开源微服务项目 有来商城youlai-mall 版本升级为背景来开展的,本篇则是讲述API网关使用Gateway替代Zuul,有兴趣的朋友可以进去给个star,非常感谢 ...

  6. springcloud组件gateway断言(Predicate)

    Spring Cloud Gateway是SpringCloud的全新子项目,该项目基于Spring5.x.SpringBoot2.x技术版本进行编写,意在提供简单方便.可扩展的统一API路由管理方式 ...

  7. SpringCloud创建Gateway模块

    1.说明 本文详细介绍Spring Cloud创建Gateway模块的方法, 基于已经创建好的Spring Cloud父工程, 请参考SpringCloud创建项目父工程, 和已经创建好的Eureka ...

  8. 深入理解SpringCloud之Gateway

    虽然在服务网关有了zuul(在这里是zuul1),其本身还是基于servlet实现的,换言之还是同步阻塞方式的实现.就其本身来讲它的最根本弊端也是再此.而非阻塞带来的好处不言而喻,高效利用线程资源进而 ...

  9. 微服务SpringCloud之GateWay服务化和过滤器

    Spring Cloud Gateway 提供了一种默认转发的能力,只要将 Spring Cloud Gateway 注册到服务中心,Spring Cloud Gateway 默认就会代理服务中心的所 ...

随机推荐

  1. Java知识系统回顾整理01基础01第一个程序03Eclipse下载安装

    Eclipse是最流行的java 集成开发环境IDE(Integrated Development Environment) 下载安装Eclipse两种方式 一.方式1:Eclipse官网下载安装 链 ...

  2. opencv的imread函数相对路径问题和 main 参数问题

    参考: https://blog.csdn.net/u013404374/article/details/80178822 https://blog.csdn.net/fujilove/article ...

  3. Java中的对象都是在堆上分配的吗?

    作者:LittleMagic https://www.jianshu.com/p/8377e09971b8 为了防止歧义,可以换个说法: Java对象实例和数组元素都是在堆上分配内存的吗? 答:不一定 ...

  4. API可视化管理平台YApi

    Yapi是什么 YApi 是高效.易用.功能强大的 api 管理平台,旨在为开发.产品.测试人员提供更优雅的接口管理服务.可以帮助开发者轻松创建.发布.维护 API,YApi 还为用户提供了优秀的交互 ...

  5. shell-变量的数值运算符-计算双括号(())的使用

    1. 变量的数值计算 变量的数值计算常见的如下几个命令: (()).let.expr.bc.$[]  1) (())用法:(此法很常用,且效率高) 执行简单的整数运算,只需将特定的算术表达式用 &qu ...

  6. ARM-Linux S5PV210 UART驱动(转)

    ARM-Linux S5PV210 UART驱动(3)----串口核心层.关键结构体.接口关系 尽管一个特定的UART设备驱动完全可以按照tty驱动的设计方法来设计,即定义tty_driver并实现t ...

  7. golang常用库:字段参数验证库-validator

    背景 在平常开发中,特别是在web应用开发中,为了验证输入字段的合法性,都会做一些验证操作.比如对用户提交的表单字段进行验证,或者对请求的API接口字段进行验证,验证字段的合法性,保证输入字段值的安全 ...

  8. MeteoInfoLab脚本示例:FY-3C全球火点HDF数据

    FY-3C全球火点HDF数据包含一个FIRES二维变量,第一维是火点数,第二维是一些属性,其中第3.4列分别是火点的纬度和经度.下面的脚本示例读出所有火点经纬度并绘图.脚本程序: #Add data ...

  9. MeteoInfoLab脚本示例:线性拟合

    MeteoInfoLab提供一个线性拟合函数linregress,参数是参与拟合的两个数据序列,返回拟合的斜率.截距和相关系数.有了上述拟合参数可以用polyval函数生成拟合数据(直线).然后可以将 ...

  10. ERP订单管理的操作与设计--开源软件诞生19

    赤龙ERP订单模块讲解--第19篇 用日志记录"开源软件"的诞生 [点亮星标]----祈盼着一个鼓励 博主开源地址: 码云:https://gitee.com/redragon/r ...